我想在没有默认动画的情况下设置strokeEnd
属性,完全没有动画。我四处寻找,试图找到如何做到这一点,但一切似乎都是关于如何动画属性。
最佳答案
在核心动画术语中,动画的一个更一般的术语是“动作”。例如,您可以看到CAAnimation
符合CAAction
协议。您还可以看到禁用它们(禁用动画)时使用的术语“操作”。
有许多不同的方法可以改变层的动作。其中许多文献在the discussion of the actionForKey:
documentation on CALayer
(以下摘录)中得到了很好的记录。其中一些在子类中更为相关(也可以覆盖子类中的actionForKey:
),以便为新的键添加更多的隐式操作。
此方法按以下顺序搜索层的关联操作:
如果层有委托,而委托实现访问层的筛选器方法,则层调用该方法。代理必须执行以下操作之一:
返回给定键的操作对象。
如果不处理操作,则返回nil
。
如果NSNull
对象不处理操作,则返回该对象,搜索应终止。
该层在层的actions
字典中查找。
该层在“样式字典”中查找包含键的操作字典。
该层调用其“defaultactionforkey:method”来查找任何类定义的操作。
该层查找由核心动画定义的任何隐式动作。
要禁用动画时最有趣的两种方法是(两种不同的方法,因为它们用于稍有不同的事情):
使用CATransaction
禁用操作(以上未提及)
为操作字典中的键设置[NSNull null]
(上面的数字2)
禁用操作
当您暂时想完全禁用多个不同属性的操作,而在其他地方仍有动画时,使用事务来禁用动画是很好的。在代码中,它看起来像这样:
[CATransaction begin];
[CATransaction setDisableActions:YES];
// change your property here
yourShapeLayer.strokeEnd = 0.7;
[CATransaction commit]; // animations are disabled until here...
更改操作字典
通过修改Lead Actudio字典,可以永久更改一个或多个键的默认动画。设置
@"strokeEnd"
意味着不应该有动画,并且该层应该停止在其他地方寻找默认动画。也可以使用此选项添加可设置动画的属性。使用动作字典删除动画如下所示:yourShapeLayer.actions = @{@"strokeEnd": [NSNull null]};
yourShapeLayer.strokeEnd = 0.7; // this won't have an animation
关于objective-c - 更改CAShapeLayer而不设置动画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21688363/