Comment déplacez-vous un calayer instantanément (sans animation)

J’essaie de faire glisser un CALayer dans une application iOS.

Dès que je change de propriété de position, il essaie de s’animer à la nouvelle position et scintille partout:

layer.position = CGPointMake(x, y) 

Comment puis-je déplacer les CALayers instantanément? Je n’arrive pas à comprendre l’API Core Animation.

Vous souhaitez emballer votre appel de la manière suivante:

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

Vous pouvez également utiliser la fonction de commodité

 [CATransaction setDisableActions:YES] 

ainsi que.

Note: Assurez-vous de lire les commentaires de Yogev Shelly pour comprendre tout ce qui pourrait se produire.

Swift 3 Extension:

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

Utilisation:

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

Comme d’autres l’ont suggéré, vous pouvez utiliser CATransaction .
Le problème vient du fait que CALayer a une durée implicite d’animation implicite de 0,25 seconde.

Ainsi, une alternative plus simple (à mon avis) à setDisableActions est d’utiliser setAnimationDuration avec une valeur de 0.0 .

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