Qu'est-ce exactement ne bool paramètre n'en animateWithDuration:animations:achèvement:
J'ai renvoyé à la DOC et il a dit:
achèvement
... Ce bloc n'a pas de valeur de retour et prend un seul argument Booléen qui indique si oui ou non les animations réellement terminée avant que le gestionnaire d'achèvement a été appelé. ...
Mais je trouve que n'importe que vous utilisez le paramètre booléen ou pas, le completion:
bloc sera toujours exécuté après animations:
bloc. Tout comme les deux de bloc simple animation à base d'extraits de code montré ci-dessous, deux d'entre eux font de même.
[UIView animateWithDuration:0.3f
delay:0.0f
options:UIViewAnimationCurveEaseInOut
animations:^{
[myView setAlpha:0.0f];
}
completion:^(BOOL finished) {
[myView removeFromSuperview];
}];
et
[UIView animateWithDuration:0.3f
delay:0.0f
options:UIViewAnimationCurveEaseInOut
animations:^{
[myView setAlpha:0.0f];
}
completion:^(BOOL finished) {
if (finished) [myView removeFromSuperview];
}];
Et je trouve que la plupart des gens(moi y compris) d'utiliser la première(même la pomme officiel de doc exemple). Donc,
- quelle est la
finished
paramètre utilisé pour ici exactement? - ou ce qui est la situation va être utilisé?
- Bonne question, je n'ai jamais vraiment demandé ce jusqu'à ce que mon code a été la création de la saisie-causant des animations d'aujourd'hui. Merci de demander ce!
Vous devez vous connecter pour publier un commentaire.
Le fini paramètre sera PAS lorsque l'animation a été annulé: en règle générale, lorsque vous avez interrompu l'animation pour en commencer un autre (par exemple, vous avez commencé une nouvelle animation, avant que le cours est terminé, avec le paramètre pour commencer à partir de l'état actuel) ou que vous avez directement annulé l'animation.
En effet, cela annule le courant de l'animation, mais la fin d'un bloc est encore appelée. Si vous avez été chaînage une séquence d'animations vous voulez que la chaîne pour arrêter, de sorte que vous ne poursuivez la chaîne de l'animation précédente avait fini.
Comme un exemple, imaginez que vous avez un jeu où une bombe a été de voler à travers l'écran. Si l'utilisateur n'appuyez pas sur la bombe, il explose quand il atteint le bord. Donc, si vous voulez avoir une animation pour déplacer la bombe, et la fin du bloc aurait une autre animation pour montrer l'explosion, et peut-être un appel à une méthode pour réduire une partition ou quelque chose.
Si l'utilisateur appuie sur la bombe, vous souhaitez annuler le déplacement de l'animation et ont la bombe à la mouche en s'éloignant doucement. Votre original achèvement de bloc encore être exécuté, de sorte que vous aurez besoin de savoir si l'animation a fini sur son propre, ou a été annulée.
finished
paramètre, soit. J'ai fait de cette façon(sansif
déclaration) pour la séquence d'animations dans mon application et sans la moindre fausse erreur de commande.finished == false
. Une idée de comment le faire?