如何防止CALayer隐式动画?

ope*_*rog 16 iphone calayer

当我设置实例的backgroundColor属性时CALayer,更改似乎有点动画.但在我的情况下,我不希望这样.如何设置backgroundColor无动画?

Ben*_*Ben 34

您可以CATransaction使用禁用的动画将更改包装为:

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
//change background colour
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)

  • 任何未来观众的注意事项:[here](http://stackoverflow.com/questions/2244147/disabling-implicit-animations-in-calayer-setneedsdisplayinrect)提供的答案提供了更好的性能. (5认同)
  • 有任何方法可以完全禁用CALayer中的每个未来属性设置吗?我正在改变一些属性,例如每秒20次...... (3认同)

rou*_*nak 12

[CATransaction begin];
[CATransaction setDisableActions:YES];
//your code here        
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)


小智 9

尝试给你的图层delegate,然后有delegate实现:

- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)key {
    return [NSNull null];
}
Run Code Online (Sandbox Code Playgroud)


Sur*_*gch 9

迅速

这里还有其他一些Swift答案,但我认为这是最基本的答案:

CATransaction.begin()
CATransaction.setDisableActions(true)

// change the layer's background color

CATransaction.commit()
Run Code Online (Sandbox Code Playgroud)