【iOS】UIDynamicAnimator动画

栏目: IOS · 发布时间: 7年前

内容简介:【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 }

【iOS】UIDynamicAnimator动画

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 }

【iOS】UIDynamicAnimator动画

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 }

【iOS】UIDynamicAnimator动画


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux/UNIX系统编程手册

Linux/UNIX系统编程手册

Michael Kerrisk / 孙剑 许从年 董健、孙余强 郭光伟 陈舸 / 人民邮电出版社 / 2014-1 / 158

《linux/unix系统编程手册(上、下册)》是介绍linux与unix编程接口的权威著作。linux编程资深专家michael kerrisk在书中详细描述了linux/unix系统编程所涉及的系统调用和库函数,并辅之以全面而清晰的代码示例。《linux/unix系统编程手册(上、下册)》涵盖了逾500个系统调用及库函数,并给出逾200个程序示例,另含88张表格和115幅示意图。 《li......一起来看看 《Linux/UNIX系统编程手册》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具