fillMode详解

作者: 西南柯北 | 来源:发表于2018-06-10 16:46 被阅读7次

    开发中给图层做动画时,为了让图层在动画完成之后保持在动画完后的那一刻的状态,通常将动画的isRemovedOnCompletion设置为true, 将fillMode设置为kCAFillModeForwards,即可达到效果。fillMode除了可设置kCAFillModeForwards外,还有kCAFillModeRemoved、kCAFillModeBackwards、kCAFillModeBoth三个值。在分析这三个值之前,先来看看fillMode的定义。
    fillMode 定义了计时对象在其非活跃时段的行为。CAAnimation子类的实例就是计时对象。对于CAAnimation来说,非活跃时段就是动画开始前和动画完成后的时间段。
    接下来说说fillMode的四个值的作用:
    kCAFillModeRemoved:默认模式,动画开始前和结束后,动画对layer的状态没有影响。也就是说,动画开始前和结束后,layer都会处于添加动画前的状态。
    kCAFillModeForwards:动画结束后,layer处于动画结束那一刻的状态。
    kCAFillModeBackwards:动画开始前,layer处于动画开始那一刻的状态。
    kCAFillModeBoth:动画开始前,layer处于动画开始那一刻的状态;动画结束后,layer处于动画结束那一刻的状态。
    kCAFillModeRemoved对动画开始前和结束后两个时段都没有影响,在这两个时段,layer都将处于添加动画前的状态;kCAFillModeForwards影响的是动画结束后的状态,也就是说,动画完成后会状态会保持,不会突然回到原始状态。
    kCAFillModeBackwards影响的是动画开始前的状态。默认情况下,动画添加到layer上,会立即开始动画,这时不能对比出kCAFillModeBackwards与kCAFillModeRemoved的差异,要测试kCAFillModeBackwards的效果,需要将动画的fromeValue设置为与layer添加动画前的值不同(例如要对layer沿x轴作平移动画,layer的position.x原来为50,可以将动画的fromeValue设置成100),并设置beginTime将动画延迟一定时间。
    kCAFillModeForwards比较常用,影响的是动画结束后的状态。
    kCAFillModeBoth可以看作是kCAFillModeBackwards和kCAFillModeForwards的结合。
    需要注意,fillMode不论设置什么值,显示动画都不会改变layer的模型图层,影响的只是layer的呈现图层。

    下面来看看示例代码以及效果:


    示例代码.png

    效果:

    anim.fillMode = kCAFillModeRemoved
    
    kCAFillModeRemoved.gif
    anim.fillMode = kCAFillModeBackwards
    
    kCAFillModeBackwards.gif
    anim.fillMode = kCAFillModeForwards
    
    kCAFillModeForwards.gif
    anim.fillMode = kCAFillModeBoth
    
    kCAFillModeBoth.gif

    相关文章

      网友评论

        本文标题:fillMode详解

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