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就很调皮的跟着你的手指移动啦