美文网首页
第11章 图层时间

第11章 图层时间

作者: cdd48b9d36e0 | 来源:发表于2018-09-08 22:29 被阅读7次

    11.1 CAMediaTiming协议

    durationrepeatCount 默认都是0。但这不意味着动画时长为0秒,或者0 次,这里的0仅仅代表了“默认”,也就是0.25秒和1次。
    还有一个repeatDuration属性,它让动画重复一个指 定的时间,而不是指定次数。你甚至设置一个叫做autoreverses的属性(BOOL 类型)在每次间隔交替循环过程中自动回放

    相对时间

    Core Animation,时间都是相对的,每个动画都有它自己描述的时间, 可以独立地加速,延时或者偏移。
    beginTime 指定了动画开始之前的的延迟时间。默认是0(就是说动画会立刻执行)。
    speed 是一个时间的倍数,默认1.0,减少它会减慢图层/动画的时间,增加它会 加快速度。如果2.0的速度,那么对于一个 duration 为1的动画,实际上在0.5秒 的时候就已经完成了。
    timeOffset 是让动画快进到某一点,例如,对于一个持续1秒的动画
    为0.5意味着动画将从一半的地方开始,然后走完一个完整的动画周期

    fillMode

    动画之间的间隙处理方式,是四种字符串常量,默认是 kCAFillModeRemoved
    kCAFillModeForwards
    kCAFillModeBackwards
    kCAFillModeBoth
    kCAFillModeRemoved

    11.2 层级关系时间

    对CALayer和CAGroupAnimation调整duration和repeatCount/repeatDuration属性并不会影响到子动画。但 beginTime,timeOffset和speed 属性将会影响到子动画。

    全局时间和本地时间

    CoreAnimation有一个全局时间的概念,也就是所谓的马赫时间(“马赫”实际上是 iOS和Mac OS系统内核的命名)
    CACurrentMediaTime函数来访问马赫时间:
    CFTimeInterval time = CACurrentMediaTime()
    因此马赫时间对长时间测量并不有用。比如用CACurrentMediaTime去更新一个实时闹钟并不明智。(可以用[NSDate date]代替,就像第三章例子所示)。
    每个CALayer和CAAnimation实例都有自己本地时间的概念,是根据父图层/动画层级关系中的beginTime,timeOffset和speed属性计算。就和转换不同图层之间坐标关系一样,CALayer同样也提供了方法来转换不同图层之间的本地时间。如下:

    - (CFTimeInterval)convertTime:(CFTimeInterval)t fromLayer:(CALayer *)l; 
    - (CFTimeInterval)convertTime:(CFTimeInterval)t toLayer:(CALayer *)l;
    

    11.3 手动动画

    timeOffset一个很有用的功能在于你可以它可以让你手动控制动画进程,通过设置speed为0,可以禁用动画的自动播放,然后来使用timeOffset来来回显示动画序列。这可以使得运用手势来手动控制动画变得很简单。
    举个简单的例子:还是之前关门的动画,修改代码来用手势控制动画。我们给视图添加一个UIPanGestureRecognizer,然后用timeOffset左右摇晃。

    相关文章

      网友评论

          本文标题:第11章 图层时间

          本文链接:https://www.haomeiwen.com/subject/nsolgftx.html