内容简介:【iOS】UIDynamicAnimator动画
创建动画
1 UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
协议代理
1 @protocol UIDynamicAnimatorDelegate <NSObject> 2 3 @optional 4 - (void)dynamicAnimatorWillResume:(UIDynamicAnimator *)animator; 5 - (void)dynamicAnimatorDidPause:(UIDynamicAnimator *)animator; 6 7 @end
属性
1 // 行为执行时间 2 @property (nonatomic, readonly) NSTimeInterval elapsedTime; 3 // 判断是否正在执行 4 @property (nonatomic, readonly, getter = isRunning) BOOL running;
设置动画组件Item的动力属性
UIDynamicItemBehavior
1 UIDynamicItemBehavior *dynamic = [[UIDynamicItemBehavior alloc] init]; 2 [animator addBehavior:dynamic]; 3 [dynamic addItem:view]; 4 5 // 相关属性 6 @property (readwrite, nonatomic) CGFloat elasticity; // Usually between 0 (inelastic) and 1 (collide elastically) 7 @property (readwrite, nonatomic) CGFloat friction; // 0 being no friction between objects slide along each other 8 @property (readwrite, nonatomic) CGFloat density; // 1 by default 9 @property (readwrite, nonatomic) CGFloat resistance; // 0: no velocity damping 10 @property (readwrite, nonatomic) CGFloat angularResistance; // 0: no angular velocity damping
为动画组件添加具体行为
吸引行为 UISnapBehavior
1 UISnapBehavior *snap = [[UISnapBehavior alloc] 2 initWithItem:view 3 snapToPoint:CGPointMake(200, 300)]; 4 snap.damping = 0.9;//阻尼系数 5 [animator addBehavior:snap];
重力行为 UIGravityBehavior
1 UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init]; 2 // 重力矢量方向 默认为 (0,1) 3 gravity.gravityDirection = CGVectorMake(0, 1); 4 // 重力大小 5 gravity.magnitude = 5; 6 [animator addBehavior:gravity]; 7 [gravity addItem:view];
碰撞行为 UICollisionBehavior
1 UICollisionBehavior *collision = [[UICollisionBehavior alloc] init]; 2 // 边界刚体碰撞 3 collision.translatesReferenceBoundsIntoBoundary = YES; 4 [animator addBehavior:collision]; 5 [collision addItem:view];
作用力行为 UIPushBehavior
1 UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[view] 2 mode:UIPushBehaviorModeInstantaneous]; 3 // UIPushBehaviorModeContinuous 持续作用力 4 // UIPushBehaviorModeInstantaneous 瞬间作用力 5 push.active = YES; 6 push.pushDirection = CGVectorMake(1, 0); 7 [animator addBehavior:push];
效果演示
UIDynamicItemBehavior+UIGravityBehavior+UICollisionBehavior
1 - (void)viewDidLoad
2 {
3 [super viewDidLoad];
4 // Do any additional setup after loading the view, typically from a nib.
5
6 animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
7
8 dynamic = [[UIDynamicItemBehavior alloc]init];
9 dynamic.elasticity = 0.7;// 弹力系数
10 [animator addBehavior:dynamic];
11
12 gravity = [[UIGravityBehavior alloc]init];
13 gravity.gravityDirection = CGVectorMake(0, 1);// 重力矢量方向
14 [animator addBehavior:gravity];
15
16 collision = [[UICollisionBehavior alloc]init];
17 collision.translatesReferenceBoundsIntoBoundary = YES;// 边界刚体碰撞
18 [animator addBehavior:collision];
19 }
20
21 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
22 {
23 CGFloat width = self.view.frame.size.width;
24
25 int x = arc4random()%(int)width;
26 int z = arc4random()%20;
27
28 UIView *view = [[UIView alloc]initWithFrame:CGRectMake(x, 10, 20+z, 20+z)];
29 view.backgroundColor = [UIColor greenColor];
30 view.layer.borderColor = [UIColor blueColor].CGColor;
31 view.layer.borderWidth = 1.0;
32 view.layer.masksToBounds = YES;
33 [self.view addSubview:view];
34
35
36 [dynamic addItem:view];
37 [gravity addItem:view];
38 [collision addItem:view];
39 }
UIPushBehavior+UIGravityBehavior
1 - (void)viewDidLoad
2 {
3 [super viewDidLoad];
4 // Do any additional setup after loading the view, typically from a nib.
5
6 animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
7
8 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
9 [self.view addGestureRecognizer:tap];
10
11 gravity = [[UIGravityBehavior alloc] init];
12 gravity.gravityDirection = CGVectorMake(0, 1);
13 gravity.magnitude = 10.0;
14 [animator addBehavior:gravity];
15 }
16
17 - (void)tap:(UITapGestureRecognizer *)tap
18 {
19 CGPoint point = [tap locationInView:self.view];
20
21 for (CGFloat i = 0 ; i < M_PI*2; i = i + 0.2)
22 {
23 UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 10, 10)];
24 view.center = point;
25 view.backgroundColor = [UIColor blueColor];
26 view.layer.cornerRadius = 5;
27 view.layer.masksToBounds = YES;
28 [self.view addSubview:view];
29
30 UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[view]
31 mode:UIPushBehaviorModeInstantaneous];
32 push.active = YES;
33 push.angle = i;
34 push.magnitude = 0.05;
35 [animator addBehavior:push];
36
37 [gravity addItem:view];
38 }
39 }
UIDynamicItemBehavior+UICollisionBehavior+UISnapBehavior
1 - (void)viewDidLoad
2 {
3 [super viewDidLoad];
4 // Do any additional setup after loading the view, typically from a nib.
5
6 animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
7
8 dynamic = [[UIDynamicItemBehavior alloc]init];
9 dynamic.elasticity = 0.7;// 弹力系数
10 [animator addBehavior:dynamic];
11
12 collision = [[UICollisionBehavior alloc]init];
13 collision.translatesReferenceBoundsIntoBoundary = YES;// 边界刚体碰撞
14 [animator addBehavior:collision];
15
16 CGFloat width = self.view.frame.size.width;
17 CGFloat height = self.view.frame.size.height;
18
19 red = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
20 red.center = CGPointMake(width/2, height/2+100);
21 red.backgroundColor = [UIColor redColor];
22 red.layer.cornerRadius = 15.0;
23 red.layer.masksToBounds = YES;
24 [self.view addSubview:red];
25
26 [collision addItem:red];
27
28 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
29 [self.view addGestureRecognizer:tap];
30 }
31
32 - (void)tap:(UITapGestureRecognizer *)tap
33 {
34 CGPoint point = [tap locationInView:self.view];
35
36 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
37 view.center = point;
38 view.backgroundColor = [UIColor blueColor];
39 view.layer.cornerRadius = 10.0;
40 view.layer.masksToBounds = YES;
41 [self.view addSubview:view];
42
43 [collision addItem:view];
44
45 UISnapBehavior *snap = [[UISnapBehavior alloc]
46 initWithItem:view
47 snapToPoint:red.center];
48 snap.damping = 0.1;
49 [animator addBehavior:snap];
50
51 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
52 [animator removeBehavior:snap];
53 });
54 }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 【Android 动画】动画详解之属性动画(三)
- 【Android 动画】动画详解之属性动画(五)
- Flutter 动画全解析(动画四要素、动画组件、隐式动画组件原理等)
- 【Android 动画】动画详解之补间动画(一)
- 系统学习iOS动画之一:视图动画
- 初识属性动画——使用Animator创建动画
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C语言常用算法分析
明日科技 / 2012-1 / 39.80元
《C语言学习路线图•C语言常用算法分析》共分为4篇,第1篇为算法基础篇,包括程序之魂——算法、数据结构基础、查找与排序算法、基本算法思想等内容;第2篇为常用算法篇,包括数学算法、矩阵与数组问题、经典算法等内容;第3篇为趣味算法篇,包括数学趣题、逻辑推理题等内容;第4篇为算法竞技篇,包括计算机等级考试算法实例、程序员考试算法实例、信息学奥赛算法实例等内容。 《C语言学习路线图•C语言常用算法分......一起来看看 《C语言常用算法分析》 这本书的介绍吧!