当我设置backgroundColor
实例的CALayer
属性时,更改似乎略有动画。但在我的情况下,我不希望这样。如何在没有动画的情况下设置backgroundColor
?
答案 0 :(得分:34)
您可以将更改包含在已禁用动画的CATransaction
中:
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
//change background colour
[CATransaction commit];
答案 1 :(得分:12)
[CATransaction begin];
[CATransaction setDisableActions:YES];
//your code here
[CATransaction commit];
答案 2 :(得分:9)
<强>夫特强>
此处还有其他一些Swift答案,但我认为这是最基本的答案:
CATransaction.begin()
CATransaction.setDisableActions(true)
// change the layer's background color
CATransaction.commit()
答案 3 :(得分:8)
尝试为您的图层delegate
提供一个delegate
工具:
- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)key {
return [NSNull null];
}
答案 4 :(得分:2)
如果要完全禁用属性的隐式动画,可以通过分配actions
字典来实现:
myLayer.actions = @{@"backgroundColor": [NSNull null]};
如果您希望根据具体情况禁用隐式动画,那么使用[CATransaction setDisableActions:YES]
仍然是更好的方法。
答案 5 :(得分:1)
我已经接受了Ben的回答并制作了一个Swift辅助函数,以防万一它对任何人都有用:
func withoutCAAnimations(closure: () -> ()) {
CATransaction.begin()
CATransaction.setValue(kCFBooleanTrue, forKey: kCATransactionDisableActions)
closure()
CATransaction.commit()
}
# Example usage:
withoutCAAnimations { layer.backgroundColor = greenColor; }