objective framework data apple ios objective-c cocoa-touch core-animation

framework - swift ios documentation



Cómo mueves un CALayer al instante(sin animación) (4)

Estoy intentando arrastrar un CALayer en una aplicación de iOS.

Tan pronto como cambio su propiedad de posición, intenta animar a la nueva posición y parpadea por todos lados:

layer.position = CGPointMake(x, y)

¿Cómo puedo mover CALayers al instante? Parece que no puedo entender la API Core Animation.


Como otros han sugerido, puede usar CATransaction .
El problema surge porque CALayer tiene una duración de animación implícita predeterminada de 0.25 segundos.

Por lo tanto, una alternativa más fácil (en mi opinión) a setDisableActions es usar setAnimationDuration con un valor de 0.0 .

[CATransaction begin]; [CATransaction setAnimationDuration:0.0]; layer.position = CGPointMake(x, y); [CATransaction commit];


Desea completar su llamada de la siguiente manera:

[CATransaction begin]; [CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions]; layer.position = CGPointMake(x, y); [CATransaction commit];


Swift 3 Extension:

extension CALayer { class func performWithoutAnimation(_ actionsWithoutAnimation: () -> Void){ CATransaction.begin() CATransaction.setValue(true, forKey: kCATransactionDisableActions) actionsWithoutAnimation() CATransaction.commit() } }

Uso:

CALayer.performWithoutAnimation(){ someLayer.position = newPosition }


También puedes usar la función de conveniencia

[CATransaction setDisableActions:YES]

también.

Nota: asegúrese de leer los comentarios de Yogev Shelly para entender cualquier problema que pueda ocurrir.