内容简介:【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创建动画
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Hacking Growth
Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00
The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!