zoukankan      html  css  js  c++  java
  • UIDynamicAnimator UIKit动力学

    也许是工作上并没有这方面的需要,对UIDynamicAnimator的了解不多。这里做简单的介绍;

    UIKit动力学是模拟真实世界的一些特性,主要就是UIDynamicAnimator类,通过类中的不同行为实现一些动态特性;

    1、初始化


    UIDynamicAnimator有两种初始化方式;

     let  animator = UIDynamicAnimator(referenceView: self.view)
    

     self.view表示一个参照试图,用来规定物理仿真的范围

     animator = UIDynamicAnimator.init(collectionViewLayout: <#T##UICollectionViewLayout#>)
    

     不是任何对象都能做物理仿真,能够进行物理仿真的元素需要遵守UIDynamicItem协议,UIView遵守了该协议,所以任何UI控件都能进行物理仿真。

    UICollectionViewLayoutAttributes类默认也遵守UIDynamicItem协议,所以也可以进行仿真

    2、物理仿真行为


    UIDynamicAnimator有以下几种物理仿真行为:

    UIGravityBehavior:重力行为

    UICollisionBehavior:碰撞行为

    UISnapBehavior:捕捉行为

    UIPushBehavior:推动行为

    UIAttachmentBehavior:附着行为

    UIDynamicItemBehavior:动力元素行为

    将物理仿真行为添加到仿真器上开始进行仿真操作;


    3、UIDynamicAnimator的常见方法

    //添加一个物理行为
    animator .addBehavior(<#T##behavior: UIDynamicBehavior##UIDynamicBehavior#>)
    
    //移除一个物理行为
    animator .removeBehavior(<#T##behavior: UIDynamicBehavior##UIDynamicBehavior#>)
    
    //移除全部物理行为
    animator .removeAllBehaviors()
    

    4、实际使用(以推动行为为例)

    animator.removeAllBehaviors()
    let push = UIPushBehavior.init(items: [self.gravity,self.push], mode: UIPushBehaviorMode.instantaneous)
    push.magnitude = 1  //推动的量级必须初始化,量级的大小表示推动的速度
    animator .addBehavior(push) //控件被推出视图
    

     再添加一种碰撞行为

    collision = UICollisionBehavior.init(items: [self.gravity,self.push])
    collision.translatesReferenceBoundsIntoBoundary = true
    collision.collisionMode = UICollisionBehaviorMode.everything  //这里模式的选择 大家可以不断的调试来检查   尤其是混合效果 比如如果我把推动的模式写为continuous连绵不断的推动,则混合效果中控件就会贴在参照图的边缘不动
    animator .addBehavior(collision)
    
  • 相关阅读:
    在其他对象上同步
    如何在一个线程环境中使用一个线程非安全的java类
    原子类
    Volatile
    Spring中的设计模式2
    Spring中的设计模式
    Struts2中的设计模式
    Struts2中的设计模式----ThreadLocal模式
    享元模式(Flyweight)
    Java类加载器的工作原理
  • 原文地址:https://www.cnblogs.com/lidarui/p/5996190.html
Copyright © 2011-2022 走看看