2013-01-04 1 views
1

Possible en double:
How to prevent CALayer from implicit animations?Pourquoi changer les valeurs d'un CAGradientLayer provoque une animation "automatique"? Et comment puis-je l'éviter?

J'utilise un CAGradientLayer comme masque de calque pour un UIView. L'intention est d'avoir la possibilité de montrer seulement une partie de l'UIView et, en réagissant à l'entrée de l'utilisateur, de changer la partie de la vue qui est visible en modifiant CAGradientLayer.

Tout cela fonctionne très bien, mais je l'ai rencontré un problème: Pour changer la partie du UIView qui est visible, je modifie les valeurs des propriétés suivantes du CAGradientLayer:

startPoint emplacements endPoint

Je change ces valeurs en dehors d'un bloc d'animation, cependant le changement est animé à l'écran. On dirait qu'il est exécuté avec une animation par défaut, courte (peut-être une seconde, c'est difficile à dire).

Ma question est la suivante: pourquoi le changement est-il animé? et comment puis-je empêcher l'animation? (En fait je voudrais avoir une animation, mais contrôlée par moi-même, pas celle par défaut). En guise d'observation supplémentaire, je sais que toutes ces propriétés (startPoint, endPoint et emplacements) sont signalées comme animables, mais je crois comprendre que cela signifie qu'elles peuvent être définies dans un bloc d'animation pour que le changement soit animé.

+1

Je crois que c'est ce que vous cherchez: http://stackoverflow.com/questions/3884242/how-to-prevent-calayer- à partir d'animations-implicites –

Répondre

2

La plupart des propriétés animables ont des animations par défaut. Lorsque vous les définissez, l'animation par défaut se produit.

Vous pouvez remplacer l'animation par défaut en définissant la propriété dans un bloc d'animation. Chaque fois que vous modifiez une propriété dans un bloc d'animation, les animations précédentes de cette propriété sont remplacées par votre nouvelle animation.

0

La plupart des modifications apportées à une CALayer ont lieu sous une animation implicite (par exemple, elles sont animées automatiquement). Pour éviter cela, enveloppez vos mises à jour dans le code suivant:

[CATransaction begin]; 
[CATransaction setDisableActions:YES]; 
// Your changes to the layer here... 
[CATransaction commit]; 
Questions connexes