Comment arrêter et inverser une animation UIView?
J'ai animé une UIView afin qu'il se rétracte lorsque l'utilisateur appuie sur un bouton et il s'étend en arrière à sa taille d'origine lorsque l'utilisateur appuie sur le bouton de nouveau. Jusqu'à présent, tout fonctionne très bien. Le problème est que l'animation prend un peu de temps - par exemple 3 secondes. Pendant ce temps, j'ai encore envie à l'utilisateur d'être en mesure d'interagir avec l'interface. Ainsi, lorsque l'utilisateur appuie sur le bouton de nouveau alors que l'animation est toujours en cours et l'animation est censé arrêter là où il est et arrière.
Dans la Pomme Q&Que j'ai trouvé un moyen de mettre en pause toutes les animations immédiatement:
https://developer.apple.com/library/ios/#qa/qa2009/qa1673.html
Mais je ne vois pas un moyen d'inverser l'animation à partir d'ici (et d'omettre le reste de la période initiale de l'animation). Comment puis-je y arriver?
- (IBAction)toggleMeter:(id)sender {
if (self.myView.hidden) {
self.myView.hidden = NO;
[UIView animateWithDuration:3 animations:^{
self.myView.transform = expandMatrix;
} completion:nil];
} else {
[UIView animateWithDuration:3 animations:^{
self.myView.transform = shrinkMatrix;
} completion:^(BOOL finished) {
self.myView.hidden = YES;
}];
}
}
source d'informationauteur Mischa
Vous devez vous connecter pour publier un commentaire.
Il existe une astuce que vous pouvez utiliser pour ce faire, mais il est nécessaire d'écrire une méthode distincte pour réduire (et un autre similaire, pour agrandir):
Alors maintenant, le truc, c'est de casser les 3 secondes de l'animation de la réduction de 10 animations (ou plus de 10, bien sûr) de 0,3 sec chacune en ce qui la réduction de 1/10e de l'ensemble de l'animation:
shrinkALittleBitMatrix
. Après chaque animation est fini, vous appelez la même méthode que lorsque l'bool ivarcontinueShrinking
est vrai et lorsque les int ivarsize
est positive (l'afficher en taille réelle serait size=10 et la vue avec un minimum de taille serait de taille=0). Lorsque vous appuyez sur le bouton modifier le ivarcontinueShrinking
à FAUX, et ensuite appelerexpand
. Cela permettra d'arrêter l'animation en moins de 0,3 secondes.Bien, vous devez remplir les détails, mais j'espère que cela aide.
Première: comment faire pour supprimer ou annuler une animation avec vue?
si le point de vue de nombreuses animations, telles que, une animation est de déplacer de haut en bas, d'autres se déplacer de gauche à droite;
vous pouvez annuler ou de supprimer une animation spéciale comme ceci:
quand vous faites cela, l'animation s'arrête, il va appeler son délégué:
si flag == 1, indiquer l'animation est terminée.
si flag == 0, indiquer l'animation n'est pas terminée, elle peut être annulée、supprimé.
Deuxième:vous pouvez faire ce que vous voulez faire dans ce délégué méthode.
si vous voulez obtenir le point de vue de l'image lorsque le code de suppression excute, vous pouvez le faire:
Remarque: