iOS7 UIKit动力学-碰撞特性UICollisionBehavior 上

来源:互联网 发布:宣传单用什么软件 编辑:程序博客网 时间:2024/06/05 06:57

上文我们讲到了重力属性UIGravityBehavior这个类。很明显当我们为视图加上了重力的属性之后,这个苹果的UIview就如同掉入了无底洞,不断地下坠,不断的加速。而现在呢,我们要在这个手机屏幕上,添加一个地面。使不断下落的苹果最终有一个着陆点。那么我们如何为这个视图添加一个地面呢,如下(当前内容承接上文内容,如有问题,请看上文:UIGravityBehavior):

首先在.h文件中创建一个UICollisionBehavior对象

.h:

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController  
  4. {  
  5.     UIDynamicAnimator * _animator;  
  6.     UIGravityBehavior * _gravity;  
  7.     //new  
  8.     UICollisionBehavior * _ground;  
  9. }  
  10. @end  

然后在.m文件中为UICollisionBehavior对象进行初始化,并为apple对象设置边框属性。

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     UIView * apple = [[UIView alloc] initWithFrame:CGRectMake(40,404040)];  
  5.     apple.backgroundColor = [UIColor redColor];  
  6.     [self.view addSubview:apple];  
  7.       
  8.     _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];  
  9.     _gravity = [[UIGravityBehavior alloc] initWithItems:@[apple]];  
  10.     [_animator addBehavior:_gravity];  
  11.       
  12.     /*   UICollisionBehavior   */  
  13.     _ground = [[UICollisionBehavior alloc] initWithItems:@[apple]];  
  14.     _ground.translatesReferenceBoundsIntoBoundary = YES;  
  15.     [_animator addBehavior:_ground];  
  16. }  

这里,以上的代码创建了一个碰撞的行为,它定义了一个或者多个边界交互的特性,这里没有显示的为各个空间添加边界,而是隐式的调用了一个UICollisionBehavior的属性translatesReferenceBoundsIntoBoundary,将这个属性设置为YES之后。会使边界引用使用视图提供的UIDynamicAnimator边界。构建和运行,你就会看到效果,apple落到地上弹起来了,又重新落到地上。



点击关注我,更多精彩内容!!!

群号:336146073

0 0