如何即时移动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 }