UIDynamic(物理仿真)
Posted 墨鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIDynamic(物理仿真)相关的知识,希望对你有一定的参考价值。
UIDynamic是从ios7开始引入的一种新技术,隶属于UIKit框架,我们可以认为是一种物理引擎能模拟和仿真现实生活中的物理现象,比如重力,弹性碰撞等。
可以让开发人员远离物理公式的情况下,实现一些物理仿真效果。
这里简单介绍一下重力,碰撞,捕捉的用法。
先介绍一下使用的大致步骤
- 创建物理仿真器
- 创建相应的物理仿真行为
- 将物理仿真行为添加到物理仿真器
一,重力与碰撞
提前在StoryBoard准备两个UIView,一个红色,一个蓝色。蓝色在红色的下方,保证红色下落能碰到蓝色的view。
1 //创建物理仿真器
2 UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
3 self.animator = animator; //强引用animator,否则代码块执行完成后,将被释放
4
5 //创建重力行为
6 UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.redView]];
7
8 //设置一些属性(可以不设置,不设则都为默认)
9 gravityBehavior.gravityDirection = CGVectorMake(0, 1); //重力方向
10 gravityBehavior.angle = M_PI*0.5; //重力方向
11 gravityBehavior.magnitude = 0.5; //重力加速度,1代表加速度是(每秒100个点)
12
13 //把重力行为行为添加到仿真器
14 [animator addBehavior:gravityBehavior];
15
16
17 //创建碰撞行为
18 UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.redView,self.blueView]];
19
20 //设置碰撞边界,不设置就会飞出屏幕,设置就会在屏幕边框处产生碰撞效果
21 collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
22
23 //将碰撞行为加入物理仿真器
24 [animator addBehavior:collisionBehavior];
代码执行后,就能看到红色的view下落,并撞击蓝色的View了。
二,捕捉行为
1 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
2 {
3 //获取触摸点
4 UITouch *touch = [touches anyObject];
5 CGPoint point = [touch locationInView:touch.view];
6
7 //创建仿真仿真器
8 UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
9 self.animator = animator; //仿真器
10
11 //创建捕捉行为
12 UISnapBehavior *snapBehavior = [[UISnapBehavior alloc] initWithItem:self.redView snapToPoint:point];
13
14 //设置反弹系数(反弹幅度越大,值越大,反弹幅度越小)
15 snapBehavior.damping = 0.5;
16
17 //将行为添加到仿真器
18 [animator addBehavior:snapBehavior];
19
20 }
运行一下,点击屏幕,可以发现,红色的view就很调皮的跟着你的手指移动啦
以上是关于UIDynamic(物理仿真)的主要内容,如果未能解决你的问题,请参考以下文章