没有动画改变CAShapeLayer
我想设置strokeEnd
一个财产CAShapeLayer
都没有默认的动画,没有动画。 我环顾四周试图找到如何做到这一点,但似乎一切都是关于如何动画属性。
在核心动画术语中,动画更通用的术语是“动作”。 例如,您可以看到CAAnimation
符合CAAction
协议。 您还会看到禁用它们时使用的术语“操作”(禁用动画)。
改变层的动作有很多种不同的方法。 在关于CALayer
的actionForKey:
文档的讨论中,他们中的很多都很好地被记录(摘录如下)。 其中一些在子类化时更为相关(也可以在子类中覆盖actionForKey:
为新键添加更多隐式操作。
该方法按以下顺序搜索图层的关联操作:
nil
。 NSNull
对象。 actions
字典中查找。 当你想禁用动画时,最有趣的两种方式是(两种不同,因为它们用于稍微不同的事情):
CATransaction
(未在上面提到) @"strokeEnd"
键设置[NSNull null]
禁用操作
如果您暂时想要针对多种不同的属性完全禁用操作,同时在其他地方还有动画,则使用事务来禁用动画是很好的做法。 在代码中,它看起来像这样:
[CATransaction begin];
[CATransaction setDisableActions:YES];
// change your property here
yourShapeLayer.strokeEnd = 0.7;
[CATransaction commit]; // animations are disabled until here...
更改动作字典
您可以通过修改图层操作字典来永久更改一个或多个按键的默认动画。 设置[NSNull null]
意味着不应该有动画,并且图层应该停止在其他地方寻找默认动画。 您也可以使用它来添加动画属性。 使用动作字典删除动画看起来像这样:
yourShapeLayer.actions = @{@"strokeEnd": [NSNull null]};
yourShapeLayer.strokeEnd = 0.7; // this won't have an animation
你可以做如下的事情:
NSDictionary *actions = @{@"strokeEnd": [NSNull null]};
yourShapeLayer.actions = actions;
这将使它不会为该属性生成动画。 您也可以通过将其添加到此来指定其他属性以不生成动画:
NSDictionary *actions = @{@"strokeEnd": [NSNull null], @"position": [NSNull null], @"position": [NSNull null]};
链接地址: http://www.djcxy.com/p/74253.html