iOS动画之-UIDynamicAnimator仿真动画

仿真动画

UIDynamicAnimator

UIDynamicAnimator是ios7新加的一个仿真动画,用于模拟现实世界中的物理模型,用于实现现实生活中的一些物理现象,主要包括UIAttachmentBehavior(吸附行为), UICollisionBehavior(碰撞行为), UIDynamicItemBehavior(动态配置一些属性), UIGravityBehavior(重力行为), UIPushBehavior(推动行为), UISnapBehavior(震荡行为)等。

动画实现

实现仿真动画的流程主要包括以下几个步骤:
1. 创建运动管理者
2. 创建运动行为
3. 添加运动行为
实现仿真动画的核心类主要是以下两个:

UIDynamicAnimator

UIDynamicAnimator是一个运动管理者,用于指定实现动画的视图和添加动画。

创建运动管理者

通过以下方法可以实现一个运动管理者:

UIDynamicAnimator *dynamicAnimator = [[UIDynamicAnimator alloc]initWithReferenceView:self.animationView];
    dynamicAnimator.delegate = self;

除了指定referenceView外,UIDynamicAnimator还有一个扩展类(UIDynamicAnimator (UICollectionViewAdditions))用于给UICollectionViewLayout添加动画。如下所示:

- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout;

UIDynamicAnimator可以设定UIDynamicAnimatorDelegate协议,该协议主要实现了两个方法,如下所示:

//开始运动
- (void)dynamicAnimatorWillResume:(UIDynamicAnimator *)animator;
//结束运动
- (void)dynamicAnimatorDidPause:(UIDynamicAnimator *)animator;

UIDynamicAnimator可以通过以下三个方法进行行为管理

- (void)addBehavior:(UIDynamicBehavior *)behavior;
- (void)removeBehavior:(UIDynamicBehavior *)behavior;
- (void)removeAllBehaviors;

UIDynamicBehavior

UIDynamicBehavior是一个用于创建运动行为的基类,派生的子类主要包括以下几个:

  • UIGravityBehavior:重力行为
  • UICollisionBehavior:碰撞行为
  • ** UIAttachmentBehavior:吸附行为**
  • UIDynamicItemBehavior:动力元素行为
  • UISnapBehavior:震荡行为
  • UIPushBehavior:推动行为

创建行为

  1. 重力行为
    通过创建UIGravityBehavior的对象,可以创建重力行为,UIGravityBehavior主要包括以下三个属性:
//使用向量设置重力方向
@property (readwrite, nonatomic) CGVector gravityDirection;
//使用弧度设置重力方向
@property (readwrite, nonatomic) CGFloat angle;
//重力的加速度,设置越大,运动越快
@property (readwrite, nonatomic) CGFloat magnitude;

创建完重力行为后,再添加到运动管理者,代码如下所示:

 // 1.创建一个动画管理者,使用self.view作为参照物
    UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    //TODO 这里一定要将animator设置成强引用,如果不使用property,直接用[animator addBehavior:gravityBehavior];将无法执行动画
    _animator = animator;
    // 2.创建动力学行为,并添加需要执行动画的视图
    UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.animationView]];
    // 设置向下的方向
    gravityBehavior.angle = M_PI / 2;
    // 设置加速度
    gravityBehavior.magnitude = 20;
    // 3.将动力学行为添加到动画者
    [_animator addBehavior:gravityBehavior];

2.吸附行为
通过创建UIAttachmentBehavior的对象,可以创建吸附行为,创建一个UIAttachmentBehavior对象时候,需要指定一个锚点或者一个视图来做为吸附的位置。UIAttachmentBehavior主要包括以下属性:

//用于设置吸附的类型,
@property (readonly, nonatomic) UIAttachmentBehaviorType attachedBehaviorType;
//设置锚点
@property (readwrite, nonatomic) CGPoint anchorPoint;
//设置吸附的距离
@property (readwrite, nonatomic) CGFloat length;
//阻尼系数
@property (readwrite, nonatomic) CGFloat damping;
//吸附频率,如果不设置,将来回运动,然后再慢慢停止
@property (readwrite, nonatomic) CGFloat frequency;

具体的代码可以在demo中查看
个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 ** UIView 动画 ** ** Core Animation ** ** FaceBook POP动画...
    方向_4d0d阅读 1,638评论 0 3
  • 简介 UIDynamic是iOS 7之后新添加的一些物理仿真动画库,包含在UIKit框架中。 UIDynamic中...
    Carson_Zhu阅读 320评论 0 0
  • iOS 动画 Git代码地址 在iOS实际开发中常用的动画总结下来包含3种: UIViewAnimation动画C...
    克理斯阅读 2,609评论 0 6
  • UIDynamic 中的三个重要概念 •Dynamic Animator:动画者,为动力学元素提供物理学相关的能力...
    方圆十里不留母狗阅读 462评论 0 0
  • http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众...
    Renjiee阅读 1,009评论 0 1