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.