2009-05-18 3 views
1

La documentation dit:Pourquoi la transformation de presentationLayer représente-t-elle l'état de l'animation finie, alors que l'animation est en cours d'exécution?

L'arbre de présentation contient comme une animation a lieu les valeurs qui sont actuellement en cours présentées à l'utilisateur. Par exemple, définir une nouvelle valeur pour la backgroundColor d'une couche modifie immédiatement la valeur dans l'arborescence des calques. Cependant, la valeur backgroundColor dans la couche correspondante dans l'arborescence de présentation sera mise à jour avec les couleurs interpolées telles qu'elles sont affichées à l'utilisateur.

Maintenant la vérité de mes tests de base de 8 heures dans un bac à sable avec une seule vue et une animation. Au cours de l'animation je demande:

CATransform3D currentTransform = [(CALayer *) [self.layer couche de présentation] transform]

Je vérifie pour M11 et les valeurs m12 de currentTransform, pour calculer l'angle de rotation actuel.

Quand je mis en place pour une rotation de 90 degrés, deux choses se produisent, alors que l'animation a lieu et n'a pas fini:

  • parfois mon angle calculé sur la base currentTransform est 0.0, bien que la vue est mis en rotation par un certain angle et certainement pas à 0.0.

  • et parfois (le plus souvent) c'est juste exactement la valeur cible de 90 degrés.

Mais je n'ai jamais ce que je veux: L'état actuel de l'animation. J'ai cherché un peu sur le net, et les développeurs semblent en faire rarement usage. Donc c'est soit un bug dans le framework ou un bug dans la documentation, soit mon code ci-dessus pour obtenir la transformation visible en cours est totalement faux.

+0

Comme j'ai répondu dans les commentaires sur ma réponse à votre question originale: http://stackoverflow.com/questions/877198/is-there-a-way-to-figure-out-how-many-degrees-an -view-is-rotate-actuellement-durin, j'ai utilisé le code exact affiché ici pour interroger la rotation pendant l'animation, et il a donné la bonne valeur d'animation au milieu à chaque fois. Vous faites quelque chose de différent dans votre implémentation qui vous amène à obtenir des valeurs incorrectes. Peut-être pourriez-vous fournir plus de détails dans votre question, ou un lien vers votre application de test. –

Répondre

1

Je sais que j'ai tiré le cadre de la couche de présentation pour trouver l'emplacement d'une vue sur l'écran pendant l'animation. Cela fonctionne définitivement. Je l'ai utilisé pour arrêter l'animation puis mettre à jour la vue actuelle avec la trame de la couche de présentation.

Cela devrait fonctionner, je pense que vous aurez besoin de poster votre code spécifique pour comprendre cela.

Questions connexes