首页 > 其他 > 详细

UIDynamic简单总结

时间:2015-12-21 23:16:50      阅读:190      评论:0      收藏:0      [点我收藏+]

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 动力学元素行为
 
 
  • 动力学元素行为:辅助行为
  • 用来设置运动参与物理仿真过程的参数,如:弹性系数、摩擦系数、密度、阻力、角阻力以及是否允许旋转等;
  • 属性
  1. elasticity:弹性系数,决定碰撞弹性程度;
  2. friction:摩擦系数,决定滑动时摩擦力的大小;
  3. density:密度,与size结合使用,计算物体总的重量;
  4. resistance:阻力,决定线性移动的阻力大小(区分摩擦系数)
  5. angularResistance:角阻力,决定旋转运动阻力的大小
  6. 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!