- 论坛徽章:
- 1
|
UIDynamic是从IOS7开始引入的一种新技术,隶属于UIKit框架,我们可以认为是一种物理引擎能模拟和仿真现实生活中的物理现象,比如重力,弹性碰撞等。
可以让开发人员远离物理公式的情况下,实现一些物理仿真效果。
这里简单介绍一下重力,碰撞,捕捉的用法。
先介绍一下使用的大致步骤
创建物理仿真器
创建相应的物理仿真行为
将物理仿真行为添加到物理仿真器
一,重力与碰撞
提前在StoryBoard准备两个UIView,一个红色,一个蓝色。蓝色在红色的下方,保证红色下落能碰到蓝色的view。- //创建物理仿真器
- 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了。
二,捕捉行为- - (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就很调皮的跟着你的手指移动啦 |
|