IOS碰撞动画(降落动画)
//
// Created by dkb on 15/9/27.
// Copyright © 2015年 dkb. All rights reserved.
//
// OC 实现
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)UIDynamicAnimator *animatorSet;
@property (nonatomic,strong)UIGravityBehavior *gravityAnimator;
@property (nonatomic,strong)UICollisionBehavior *collistionAnimator;
// 动画集合
@property (nonatomic,strong)UIDynamicItemBehavior *itemAnimator;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 动画 Animator
// 一.UIKit Dynamic框架是IOS7当中的新特性,里面包含了一组类和方法,可以给我们的UIView赋予非常逼真的行为和特性,让我们的开发者轻松的改善用户体验.(其实就是动画集合)
// 二.UIKit Dynamic框架有哪些行为?
/*
*例如:重力丶碰撞丶密度丶摩擦力丶弹簧丶推力(无力知识)等等....
*动画集合 (UIDynamicAnimator) ---力学生成器
*重力动画 (UIGravityBehavior) --重力
*碰撞动画 (UIColissionBehavior ---碰撞)
*还有连接动画丶吸附丶推力等等...
*/
// 三.分析知识点?
/*
效果:类似腾讯QQ的聊天动画
碰撞动画丶重力动画丶动画集合丶*动画属性集合(重要)
*/
// 四.分析实现步骤?
/*
1.准备资源文件
2.给我们的self.view添加点击事件
3.创建动画集合 --- UIDynamicAnimator
4.创建重力动画 --- UIGravityBehavior
5.创建碰撞动画 --- UIColissionBehavior
6.创建动画属性集合,动态设置动画效果
7.绑定动画
*/
// 首先使用OC实现
//2. 给self.view添加点击事件
UIGestureRecognizer *gesture = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(onClick:)];
// 绑定手势
[self.viewaddGestureRecognizer:gesture];
// 调用第3步方法
[selfcreateAnimatorSet];
[selfcreateGravityAnimator];
[selfcreateCollistionAnimator];
[selfcreateItemAnimator];
}
// 触发手势方法
- (void)onClick:(UIGestureRecognizer *)gesture
{
UIImageView *imageView = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"111.png"]];
// 这个方法返回的是当前手指点击的位置
imageView.center = [gesture locationInView:self.view];
[self.viewaddSubview:imageView];
// 7.绑定动画
[self.gravityAnimatoraddItem:imageView];
[self.collistionAnimatoraddItem:imageView];
[self.itemAnimatoraddItem:imageView];
}
// 3.创建动画集合 --- UIDynamicAnimator
- (void)createAnimatorSet
{
self.animatorSet = [[UIDynamicAnimatoralloc] initWithReferenceView:self.view];
}
// 4.创建重力动画 --- UIGravityBehavior
- (void)createGravityAnimator
{
self.gravityAnimator = [[UIGravityBehavioralloc] init];
// (为动画集合)绑定重力动画
[self.animatorSetaddBehavior:self.gravityAnimator];
}
// 5.创建碰撞动画 --- UIColissionBehavior
- (void)createCollistionAnimator
{
self.collistionAnimator = [[UICollisionBehavioralloc] init];
// 有三种
// 第一种: 设置边框(用来反弹)
// self.collistionAnimator.translatesReferenceBoundsIntoBoundary = YES;
// 第二种:自定义底部(一条固定范围的线段)
// [self.collistionAnimator addBoundaryWithIdentifier:@"line" fromPoint:CGPointMake(0, 300) toPoint:CGPointMake(100, 600)];
// 第三种:
UIBezierPath *path = [UIBezierPathbezierPathWithRect:CGRectMake(0,0, 200,200)];
[self.collistionAnimatoraddBoundaryWithIdentifier:@"cicle"forPath:path];
// (为动画集合)绑定碰撞动画
[self.animatorSetaddBehavior:self.collistionAnimator];
}
// 6.创建动画属性集合,动态设置动画效果
- (void)createItemAnimator
{
self.itemAnimator = [[UIDynamicItemBehavioralloc] init];
// 设置动画参数
// elasticity:碰撞弹性系数(0.0~1.0)
self.itemAnimator.elasticity =1.0;
// friction:摩擦力系数越大,摩擦力阻力越大(0.0~不限)
self.itemAnimator.friction =0.2;
// resistance:阻力系数(0.0~不限)
self.itemAnimator.resistance =0.2;
// 绑定属性动画
[self.animatorSetaddBehavior:self.itemAnimator];
}
// 若报错检查 :1.点击事件 2.集合 3.重力动画 4.碰撞动画 5.特别是设定边界 6.绑定动画
import UIKit
class ViewController: UIViewController {
var animatorSet:UIDynamicAnimator!
var animatorGravity:UIGravityBehavior!
var animatorCollision:UICollisionBehavior!
var animatorItem:UIDynamicItemBehavior!
override func viewDidLoad() {
super.viewDidLoad()
// 2.
let gesture = UITapGestureRecognizer(target: self, action:"onClick:")
self.view.addGestureRecognizer(gesture)
self.createAnimatorSet()
self.createAnimatorGravity()
self.createAnimatorCollision()
self.createAnimatorItem()
}
func onClick(gesture:UITapGestureRecognizer)
{
// 创建UIImageView
let imageView: UIImageView = UIImageView(image :UIImage(named:"lanqiu.png"))
// 设置中心点
imageView.center = gesture.locationInView(self.view)
self.view.addSubview(imageView)
// 绑定动画
self.animatorGravity.addItem(imageView)
self.animatorCollision.addItem(imageView)
self.animatorItem.addItem(imageView)
}
// 3. 创建动画集合 --- UIDynamicAnimator
func createAnimatorSet()
{
self.animatorSet =UIDynamicAnimator(referenceView: self.view)
}
//4.创建重力动画
func createAnimatorGravity()
{
self.animatorGravity =UIGravityBehavior();
// 绑定动画
self.animatorSet.addBehavior(self.animatorGravity)
}
// 5.创建碰撞动画
func createAnimatorCollision()
{
self.animatorCollision =UICollisionBehavior()
self.animatorCollision.translatesReferenceBoundsIntoBoundary = true
self.animatorSet.addBehavior(self.animatorCollision)
}
//6.创建动画属性集合,动态设置动画效果
func createAnimatorItem()
{
self.animatorItem =UIDynamicItemBehavior()
self.animatorItem.elasticity =1.0
self.animatorItem.friction =0.2
self.animatorItem.resistance =0.2
self.animatorSet.addBehavior(self.animatorItem)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
IOS碰撞动画(降落动画)相关推荐
- VCTransitionsLibrary –自定义iOS交互式转场动画的库
简介 VCTransitionsLibrary 提供了许多适用于入栈,出栈,模态等场景下控制器切换时的转场动画.它本身提供了一个定义好的转场动画库,你可以拖到自己工程中直接使用;也提供了许多拥有不同转 ...
- IOS开发基础之核心动画 基础动画、关键帧、组动画案例
IOS开发基础之核心动画 基础动画.关键帧.组动画案例 案例源码在我的主页里.实现效果图 // // ViewController.m // 30-核心动画 // // Created by 鲁军 o ...
- iOS - Core Animation 核心动画
1.UIView 动画 具体讲解见 iOS - UIView 动画 2.UIImageView 动画 具体讲解见 iOS - UIImageView 动画 3.CADisplayLink 定时器 具体 ...
- iOS 实现启动屏动画(Swift实现,包含图片适配)
代码地址如下: http://www.demodashi.com/demo/12090.html 准备工作 首先我们需要确定作为宣传的图片的宽高比,这个一般是与 UI 确定的.一般启动屏展示会有上下两 ...
- iOS 自定义转场动画浅谈
代码地址如下: http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差 ...
- HTML矩形与矩形、圆形与圆形、矩形与圆形元素的碰撞判断与动画
1. 矩形与矩形 判断两个矩形是否碰撞,判断条件:d1Right > d2Left && d1Bottom > d2Top && d1Left < d ...
- iOS添加自定义转场动画和交互动画(一)
准备写两篇,第一篇介绍下转场动画,第二篇介绍下我封装的一个转场动画的库,可以很简便的给VC之间的转变加上自定义动画. iOS场景对应的类是ViewController,基本上一个场景对应一个VC,从一 ...
- iOS图层配合核心动画详解
Core Animation Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现 ...
- iOS 自定义转场动画实现小红书的push效果思路以及下雪碎屏等动画的实现
感觉好久没写会动的Demo了,前几天写了很久的Block源码分析,分析了几天整个人都不好了,都不知道block是什么了......,有需要的同学可以去看看,简直不要太简单Block是什么鬼毕竟也是做电 ...
最新文章
- 专科学历事业单位工资计算机,事业单位人来告诉你:学历跟入编之后待遇关系有多大!很直接...
- 玩转spring MVC(九)---Spring Data JPA
- onnx 测试_ONNX 现场演示教程
- hdu 1542/1255 Atlantis/覆盖的面积
- Python获取环境变量值
- android 开源项目列表【持续整理中。。。】
- List对象集合通过对象属性进行查找
- html+css前端面试题(一)
- NumPy库---拷贝
- Everyting 文件查找工具
- ppt文件太大怎么压缩?
- 送给计算机老师的话,送给老师的话经典语录
- OpenAI gym Atari游戏的环境设置
- 基于语音的疲劳度检测算法研究
- 最小生成树 算法思想及模板代码
- Oracle Overview
- ai人工智能在手机的应用_常识在人工智能中仍然不常见
- 软件销售学习的内容畅谈
- 魅族手机使用鸿蒙系统,魅族宣布接入鸿蒙是怎么回事?魅族手机可以刷鸿蒙系统吗?...
- ESP使用MQTT登陆阿里云,arduino环境