59 votes

comment savoir si uiview est au milieu de l'animation?

Existe-t-il un moyen de savoir si une vue est au milieu d'une animation? Lorsque j'imprime l'objet de vue pendant qu'il se déplace, je reçois (remarquez qu'il y a une variable "animations"):

 search bar should end editing: <UISearchBar: 0x2e6240; frame = (0 0; 320 88); text = ''; autoresize = W+BM; animations = { position=<CABasicAnimation: 0x6a69c40>; bounds=<CABasicAnimation: 0x6a6d4d0>; }; layer = <CALayer: 0x2e6e00>>
 

lorsque l'animation s'est arrêtée et que j'imprime l'uiview (la variable "animations" a disparu):

 search bar should end editing: <UISearchBar: 0x2e6240; frame = (0 0; 320 88); text = ''; autoresize = W+BM; layer = <CALayer: 0x2e6e00>>
 

43voto

Nick Weaver Points 30418

Une UIView a une couche (CALayer). Vous pouvez envoyer animationKeys qui va vous donner un tableau de clés qui permettent d'identifier les animations attachée à la couche. Je suppose que si il y a des entrées, l'animation(s) sont en cours d'exécution. Si vous voulez creuser encore plus profond ont un look à la CAMediaTiming protocole qui CALayer adopte. Il fait un peu plus d'informations sur l'animation en cours.

25voto

Vincent Guerci Points 8619

Les animations sont en fait attachées à la classe Core Animation CALayer sous-jacente

Je pense donc que vous pouvez simplement vérifier myView.layer.animationKeys

11voto

Ryan Poolos Points 8676

Je ne suis pas sûr du contexte de la question mais j'avais essayé de savoir si une vue s'animait avant de commencer une deuxième animation pour éviter de sauter. Cependant, il existe une option d'animation UIView UIViewAnimationOptionBeginFromCurrentState qui combinera les animations si nécessaire pour donner une apparence fluide. Éliminant ainsi mon besoin de savoir si la vue était animée.

5voto

C4 - Travis Points 3541

Il y a un problème avec le animationKeys truc.

Parfois, il pourrait y avoir un peu de animationKeys persistante après une animation est terminée.

Cela signifie qu'un non-animer couche pourrait renvoyer un ensemble de animationKeys même si elle n'est pas réellement l'animation.

Vous pouvez assurez-vous que animationKeys sont automatiquement supprimés par définition d'une animation removedOnCompletion bien OUI.

par exemple

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"aPath"];
animation.removedOnCompletion = YES;

Si vous faites cela pour toutes les animations que vous appliquez à votre couche, il fera en sorte que lorsque la couche n'est pas l'animation il n'y a pas animationKeys présent.

0voto

HeikoG Points 1458

Vous pouvez interroger la couche de présentation comme suggéré ici Ma couche de présentation ne correspond pas à ma couche de modèle même si je n'ai pas d'animations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X