如何即时移动CALayer(无animation)
我试图在iOS应用程序中拖动一个CALayer。
一旦我改变了它的位置属性,它就会尝试animation到新的位置,并在所有地方闪烁:
layer.position = CGPointMake(x, y) 我怎样才能立即移动CALayers? 我似乎无法绕过核心animationAPI。
你想打包你的电话如下:
 [CATransaction begin]; [CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions]; layer.position = CGPointMake(x, y); [CATransaction commit]; 
您也可以使用便利function
 [CATransaction setDisableActions:YES] 
以及。
注意:请务必阅读Yogev Shelly的评论,以了解可能发生的任何问题。
 正如其他人所build议的,您可以使用CATransaction 。 
 问题来了,因为CALayer有一个默认的隐式animation持续时间0.25秒。 
 因此,更容易(在我看来) setDisableActions替代方法是使用值为0.0 setAnimationDuration 。 
 [CATransaction begin]; [CATransaction setAnimationDuration:0.0]; layer.position = CGPointMake(x, y); [CATransaction commit]; 
Swift 3扩展:
 extension CALayer { class func performWithoutAnimation(_ actionsWithoutAnimation: () -> Void){ CATransaction.begin() CATransaction.setValue(true, forKey: kCATransactionDisableActions) actionsWithoutAnimation() CATransaction.commit() } } 
用法:
 CALayer.performWithoutAnimation(){ someLayer.position = newPosition }