我想在没有默认动画的情况下设置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/

10-14 20:42
查看更多