UIDynamic概述:
 
1、UIDynamic - UIKit动力学:在最需要引入逼真的交互设计时,使用UIKit动力学可以作为实现交互设计和现实的一种补充。
 
2、特点:将现实世界动力驱动的动画引入到UIKit;比如重力行为、碰撞行为、吸附行为、悬挂行为等。
 
3、UIDynamic三要素
     
     3.1 UIDynamic Animator:动力学元素提供物理学相关的能力及动画,同时为这些元素提供相关的上下文,是动力学元素与底层iOS物理引擎之间的中介。将Behavior对象添加到Animator中即可实现动力学仿真。
 
     3.2 UIDynamic Animator Item:动力学元素,是任何遵守UIDynamicItem协议的对象。iOS7.0开始,UIView和UICollectionViewLayoutAttributes默认实现该协议。
 
     3.3 UIDynamicBehavior :动力学行为的父类。基本的动力学行为:UIGravityBehavior、UICollisionBehavior、UIAttachmentBehavior、UISnapBehavior、UIPushBehavior以及UIDynamicItemBehavior。均继承自UIDynamicBehavior类。
 
4、三个概念
(1)谁要进行物理仿真?
  物理仿真元素(Dynamic Item)
(2)执行怎样的物理仿真效果?怎样的动画效果?
  物理仿真行为(Dynamic Behavior) 
(3)让物理仿真元素执行具体的物理仿真行为
  物理仿真器(Dynamic Animator) 
重力行为
 
1、初始化仿真模拟器
     
    //self.view是一个参照视图,表示物理仿真的范围
    UIDynamicAnimator *_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
 
2、初始化物理仿真元素
 
         _item = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 50, 50)];
    _item.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"box.png"]];
    
    [self.view addSubview:_item];
 
 
3、初始化重力行为
 
         UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[_item, _item1]];
    
    //一定要将创建的行为添加到仿真模拟器中。
    [_animator addBehavior:gravity]; 
 
碰撞行为
 
1、初始化仿真模拟器(同上)
 
2、初始化物理仿真元素(同上)
 
3、初始化碰撞行为
 
      UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems:@[_item1]];
        //指定是否启用参照系的边界
    collision.translatesReferenceBoundsIntoBoundary = YES;
    [_animator addBehavior:collision];
 
连接行为
 
1、初始化仿真模拟器(同上)
 
2、初始化物理仿真元素(同上)
 
3、初始化连接行为
 
     3.1 初始化锚点坐标(设置锚点坐标随着触碰点移动)
 
         CGPoint anchor = [touch locationInView:self.view]; 
 
     
     3.2 创建连接行为
 
          UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:_item attachedToAnchor:anchor];
 
     3.3 设置连接的属性
 
         attachment.length = 0;  //设置连接点的长度
         attachment.damping = .5;  //设置衰减
         attachment.frequency = 5;  //设置震动频率
     3.4 将创建的连接行为添加到仿真模拟器中
 
          [_animator addBehavior:attachment];
 
 
附着行为
 
- 视图与锚点或者视图之间相连接而产生的动作行为;
- 两点之间连接状况,可模拟刚性或者弹性连接
- 可以实现多个物体的连接
 
 
1、初始化仿真模拟器(同上)
 
2、初始化物理仿真元素(同上) 
 
 
3、初始化附着行为
 
     3.1 设置锚点
 
         UITouch *touch = [touches anyObject];
             CGPoint point = [touch locationInView:self.view];    
     3.2 初始化附着行为
         _snap = [[UISnapBehavior alloc] initWithItem:_item snapToPoint:point];
    
     3.3 设置属性
        
           _snap.damping = .5;
    
     3.4 将附着行为添加到仿真模拟器
         [_animator addBehavior:_snap];
 
附着行为是属性
 
     1、attachedBehaviorType:连接类型
     2、items:连接视图数组 
 
     3、anchorPoint:连接锚点
     4、length:距离连接锚点的距离
连接一下两种属性即可弹性连接
     1、damping:振幅衰减
     2、frequency:振幅频率
 
push(推)行为
 
- 推行为:视图+作用力;作用力可以为持续力,也可以为一次性力
- 作用力的大小、方向、作用点均可以设置
- 属性:1、mode:推动类型  2、active:是否为激活状态(一次性推动需要激活) 3、angle:推动角度  4、magnitude:推动力量 
 
     
1、初始化仿真模拟器(同上)
 
2、初始化物理仿真元素(同上) 
 
 
3、初始化一个push行为
 
     3.1 创建push行为
 
         UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[_item1] mode:UIPushBehaviorModeInstantaneous];
 
     3.2 若只是push一次的话需要设置它的激活状态(多次时不用)
 
          push.active = YES;
 
     3.3 设置push的力度,由于是2D的,所以用触摸点滑动的距离来模拟物理力度
 
             CGFloat distance = sqrtf((powf(_endPoint.x - _beganPoint.x, 2) +powf(_endPoint.y - _beganPoint.y, 2)));
                  push.magnitude = distance/100;
 
     3.4 将创建的push对象添加到仿真模拟器中
     
              [_animator addBehavior:push];
 
 
UIDynamicItemBehavior 动力学元素行为
 
 
- 动力学元素行为:辅助行为
- 用来设置运动参与物理仿真过程的参数,如:弹性系数、摩擦系数、密度、阻力、角阻力以及是否允许旋转等;
- 属性
 
- elasticity:弹性系数,决定碰撞弹性程度;
- friction:摩擦系数,决定滑动时摩擦力的大小;
- density:密度,与size结合使用,计算物体总的重量;
- resistance:阻力,决定线性移动的阻力大小(区分摩擦系数)
- angularResistance:角阻力,决定旋转运动阻力的大小
- allowsRotation:还否允许旋转;     
 
 
 1、创建动力学元素行为
    UIDynamicItemBehavior *itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[_item,_item1]];
  
2、设置属性
 
    itemBehavior.resistance = 1;//阻尼系数
3、注意:所有的物理仿真行为 都需要加入到物理仿真模拟器中才能完成
    [_animator addBehavior:itemBehavior];
 
 
 
 
 
 
 
 
 
 
UIDynamic简单总结
原文:http://www.cnblogs.com/factor/p/5064951.html