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