zoukankan      html  css  js  c++  java
  • iOS-【UIDynamic-UIKit动力学】


    如果看不到图片 可以尝试更换浏览器(推荐Safari )

    0.了解                             

    •Dynamic Animator:动画者,为动力学元素提供物理学相关的能力及动画,同时为这些元素提供相关的上下文,是动力学元素与底层iOS物理引擎之间的中介,将Behavior对象添加到Animator即可实现动力仿真
     
    •Dynamic Animator Item:动力学元素,是任何遵守了UIDynamicItem协议的对象,从iOS 7.0开始,UIView和UICollectionViewLayoutAttributes默认实现该协议。如果自定义的对象实现了该协议,即可通过Dynamic Animator实现物理仿真
     
    •UIDynamicBehavior:仿真行为,是动力学行为的父类,基本的动力学行为类UIGravityBehavior、UICollisionBehavior、UIAttachmentBehavior、UISnapBehavior、UIPushBehavior以及UIDynamicItemBehavior均继承自该父类
     
    •协议定义的属性:
    Øbounds:Dynamic animator需要动画元素的边框时调用,只读属性,用于计算物体的边界以及质量
    Øcenter:动力学元素的中心点,读写属性
    Øtransform:动力学元素的旋转角度,读写属性(需要指定Layer的形变属性)
     
    •iOS7.0中提供的动力学行为包括:
    ØUIDynamicItemBehavior:动力学元素行为
    •DynamicItem是一个辅助的行为,用来设置运动学元素参与物理仿真过程中的参数,如:弹性系数、摩擦系数、密度、阻力、角阻力以及是否允许旋转等
    Øelasticity(弹性系数):决定了碰撞的弹性程度,比如碰撞时物体的弹性
    Øfriction(摩擦系数) :决定了沿接触面滑动时的摩擦力大小
    Ødensity(密度): 跟size结合使用,计算物体的总质量。质量越大,物体加速或减速就越困难
    Øresistance(阻力):决定线性移动的阻力大小,与摩擦系数不同,摩擦系数只作用于滑动运动
    ØangularResistance(角阻力) :决定旋转运动时的阻力大小
    ØallowsRotation(允许旋转):这个属性很有意思,它在真实的物理世界没有对应的模型。设置这个属性为 NO 物体就完全不会转动,而无论施加多大的转动力
     
     
    ØUIGravityBehavior:重力行为
    ØUICollisionBehavior:碰撞行为
    ØUIAttachmentBehavior:附着行为
    ØUISnapBehavior:吸附行为
    ØUIPushBehavior:推行为
     
    •所有的UIDynamicBehavior都是可以独立作用,同时也遵守力的合成。也就是说,组合使用行为可以实现一些较复杂的效果

                              

     

    0.1. UIDynamic中的物理学                   

    •在传统物理学中
    –力的单位是牛顿(N = kg*m/s2)
    –距离单位是米(m)
    –时间单位是秒(s)
    –质量单位是千克(kg)
    –加速度单位是m/s2,重力加速度约为:9.8m/s2
    –速度单位是m/s
    •UIDynamic中
    –使用点来替代传统物理学中的m
    –一个点的的质量为1g
    –UI重力加速度定义为1000p/s2

     

    1.UIDynamic注意点:                      

    •吸附行为可以将视图通过动画吸附到某个点上
    •初始化设定一下UISnapBehavior的initWithItem:snapToPoint:即可
    •属性:
    Ødamping:振幅大小,默认为0.5f

     

    演示代码:

     

    上面中设置视图旋转的时候,需要注意设置M_PI_4时,视图两边保持平衡状态,达不到仿真效果。

     

    需要偏移下角度。

     

    2.吸附行为                               

    •附着行为描述一个视图与一个锚点或者另一个视图相连接的情况
    •附着行为描述的是两点之间的连接情况,可以模拟刚性或者弹性连接
    •在多个物体间设定多个UIAttachmentBehavior,可以模拟多物体连接
    •属性:
    ØattachedBehaviorType:连接类型(连接到锚点或视图)
    Øitems:连接视图数组
    ØanchorPoint:连接锚点
    Ølength:距离连接锚点的距离
    只要设置了以下两个属性,即为弹性连接
    Ødamping:振幅大小
    Øfrequency:振动频率

     

    3.推动行为                                

    •推行为可以为一个视图施加一个作用力,该力可以是持续的,也可以是一次性的
    •可以设置力的大小,方向和作用点等信息
    •属性:
    •mode:推动类型(一次性或是持续推)
    active:是否激活,如果是一次性推,需要激活
    angle:推动角度
    magnitude:推动力量

    初始化的时候有两种模式:UIPushBehaviorModeContinuous(这个模型可以忽略)

    演练代码:

     

     

    注意:

    4.刚性附加行为                              

    需要两点:一个锚点(作用点)一个离行为视图中心点的偏移量,注意如果偏移量为0,刚性行为仿真效果出不来。

    5.弹性附加视图                           

     

    需要用到KVO,监听行为视图中心点的变化,因为当手指停止拖动的时候,就没有重绘两点之间的线了,就会发生下图的事情,行为视图中心点在手指停止拖动的时候还是会变化,偏移视图的坐标也会移动,因此需要重新绘制锚点和偏移视图的,这就需要在KVO的监听方法中使用。

     

     

    5.碰撞行为                                

                                                              

                                                                  Thanks!清澈Saup

  • 相关阅读:
    Java59道常见面试题,内附答案
    2020年一个月时间面试字节跳动,面试经历分享(已拿offer)
    阿里总结的《Java成神之路》 PDF 火了,完整版开放下载!
    Github14k堪称神级的Spring Boot手册,从基础入门到实战进阶
    三面阿里(支付宝)Java高开岗,复习两月有幸拿到offer
    Java 最常见的 200+ 面试题:面试必备
    【面试总结】终于拿到了美团offer了,没有辜负了这三个月的努力啊
    阿里P9都赞不绝口的面试宝典!半月看完25大专题,居然斩获阿里P7offer
    Integer是int
    抽象类和接口
  • 原文地址:https://www.cnblogs.com/qingche/p/3493212.html
Copyright © 2011-2022 走看看