iOS, le Redémarrage de l'animation lors du passage de l'arrière-plan
lorsque mon appli qui vient de sortir de l'arrière-plan de l'animation s'est arrêté. ce qui est normal. mais je veux redémarrer mon animation à partir de l'état actuel. comment puis-je faire sans mon magnétisme tous sur la place.
[UIView animateWithDuration:60 delay:0 options:(UIViewAnimationOptionCurveLinear |UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState) animations:^{
[bg setFrame:CGRectMake(0, 0, 1378, 1005)];
} completion:nil];
j'ai essayé de mettre un ensemble de cadre en face de l'animation, mais qui est tout simplement le composant logiciel enfichable.
[bg setFrame:CGRectMake(0, 0, 1378, 1005)];
des idées?
Salut. Pourriez-vous expliquer un peu ce genre d'effet que vous attendez forme de code? Je pense que "l'état actuel" est l'état actuel de l'exécution (en cours) de l'animation. Et je suppose que CA Cadre ne se soucie pas de se souvenir de l'état où l'animation a été interrompu. Êtes-vous essayer d'écrire un vélo d'animation qui peut être arrêté et redémarré à partir d'où il a été arrêté, sans la lecture à la position initiale?
salut. c'est une sorte d'effet ken burns.
et l'état actuel est l'état de l'objet est dans le moment. Il prend en compte toutes les animations actif sur l'objet
salut. c'est une sorte d'effet ken burns.
et l'état actuel est l'état de l'objet est dans le moment. Il prend en compte toutes les animations actif sur l'objet
OriginalL'auteur Stultus | 2011-05-18
Vous devez vous connecter pour publier un commentaire.
bien la réponse de @dany_23 pourrait fonctionner.
Mais j'ai trouvé une autre méthode qui fonctionne très bien si vous n'avez pas besoin de reprendre votre animation, mais le redémarrage de votre animation, sans la vue ou de la couche d'accrochage lors de la réactivation de l'application.
dans le
vous appelez une méthode dans votre viewcontroller qui implémente le code suivant.
et dans le
vous appelez une méthode dans votre viewcontroller que commence l'animation.
quelque chose comme
Espère que cette aide, Merci à tous ceux qui ont répondu.
Ne semble pas fonctionner plus dans iOS 7.
stackoverflow.com/a/11928261/173190
OriginalL'auteur Jonathan
Vous pouvez ajouter un observateur dans votre classe pour UIApplicationWillEnterForegroundnotification:
Il est important de définir le début de l'état de l'animation (et n'oubliez pas de retirer la notification de l'observateur)
+1 C'est certainement la plus souple et élégante solution pour le redémarrage d'animations en boucle. Le UIApplicationDelegate ne devriez pas avoir de soins sur le redémarrage de la MYWaitCycleView de rotation de poulet animation. @Ramiro code est parfaitement heureux assis dans un UIViewController ou sous-classe UIView, proche de la chose animés.
J'ai utilisé cette méthode pendant des années, mais maintenant, a couru dans un problème où les animations toujours arrêter et ne sont pas redémarré (ils doivent être en cours d'exécution indéfiniment dans mon cas); il se produit lorsque vous appuyez sur l'alerte demandant l'approbation de l'utilisateur de la télécommande (et/ou local) push les alertes. Je n'ai pas encore trouver une solution. Btw j'ai utiliser la notification
UIApplicationDidBecomeActiveNotification
au lieu deUIApplicationWillEnterForegroundNotification
.OriginalL'auteur Ramiro
Vous aurez pour mettre en pause l'animation lorsque votre application passe en arrière-plan et de le reprendre quand il redevient actif. Vous pouvez trouver un exemple de code ici qui décrit comment mettre en pause et de reprendre une animation.
OriginalL'auteur Steven Vandeweghe
Il y a une meilleure soloution ici que de redémarrer toute l'animation chaque fois que vous venez de fond.
Pour Swift 3, vous pouvez sous-classe de cette classe:
Il prendra soin de suspension de toutes vos animations dans l'état actuel et re-ajouter lors de l'application vient d'arrière-plan - sans remise à zéro.
Gist: https://gist.github.com/grzegorzkrukowski/a5ed8b38bec548f9620bb95665c06128
OriginalL'auteur Grzegorz Krukowski
Eh bien, si je comprends la question de bon sens, vous essayez de créer une animation et de l'arrêter au milieu.
Dans ce cas, je vous suggère d'utiliser une sorte "d'état" variable pour stocker l'état de l'animation (le cadre de la propriété par exemple). Cette variable, vous pouvez utiliser en plus de code pour mettre l'objet en cours d'animation dans la bonne position. Cela peut être fait en animationDidStop fonction (animationDidStop:fini:). Afin de mettre en œuvre cette fonction, vous aurez à utiliser la délégation. Il faut définir la valeur de AppNameViewController (ou tout autre objet unique pour l'ensemble de l'application) en tant que délégué pour une animation et d'écrire la mise en œuvre dans son m-fichier. Cela vous permettra d'exécuter "configuration de la position" code à la fin de l'animation.
Tâche suivante consiste à stocker l'état d'animation. Lors de l'exécution de l'animation, Core Animation cadre crée un groupe de couches intermédiaires (couches de présentation). Et ces couches sont affichées au cours de l'animation et alors, ils sont supprimés. Et lorsque l'animation se termine l'exécution de l'objet est tout est placé dans son état final. En fait, vous devez définir cette option lorsque vous créez dite "explicite de l'animation" (et si vous ne le faites pas, l'animation va jouer, mais l'objet qui va revenir en arrière à la fin). Chacune de ces couches de présentation, un jeu ou c'est propre copie de toutes les propriétés qui sont appelés "propriétés animables". Lorsque l'une des propriétés animables est défini comme une clé pour l'animation, Core Animation d'appels (BOOL)needsDisplayForKey qui renvoie OUI/NON. Il raconte l'Core Animation si des modifications de la clé spécifiée requis la couche d'affiche de nouveau. "L'affichage" moyens de faire appel drawInContext méthode pour la couche de présentation. Ici, vous pouvez saisir les propriétés de la couche de présentation qui est affiché à l'écran et de les mettre en "état" à la variable.
L'animation est jouée dans le thread, et afin de définir "l'état variable" j'ai utilisé de la délégation. C'nécessaire à la sous-classe CALayer (permet de "dire AnimLayer) et de définir un protocole à l'aide d'une seule méthode qui stocke l'état". Cette méthode a un paramètre qui est l'état. Ensuite, j'ai mis en œuvre le protocole de la méthode qui stocke l'état dans AnimLayer de classe et de définir l'objet unique en tant que délégué. Donc, ces couches de présentation (AnimLayer copies) ne pas stocker de l'état eux-mêmes. Au lieu de l ' "état" de la valeur passée en paramètre à la fonction de délégué est stockée par objet unique dans le thread principal.
J'ai fait quelque chose comme ça, mais ma tâche était un peu différent. Je ne sais pas la façon la plus facile, désolé. Espérons que cette aide.
animationDidStop:finished:
. Il peut mettre en œuvre lafinish:
bloc de sonanimateWithDuration:delay:options:animations:finished:
méthode. Le bloc a unefinished
argument qui lui dira si l'animation a été interrompu. Reste devrait être comme vous l'avez mentionné.OriginalL'auteur danny_23
De cette façon sera mieux, il suffit de s'inscrire sur ApplicationDelegate deviendront des méthodes et de l'observateur de l'état.
OriginalL'auteur rbbtsn0w
Je ne me rappelle pas les détails exacts, mais je pense que vous pouvez obtenir le courant animé la position de l'image en regardant les limites du calque et de la propriété position de votre point de vue. Vous pouvez stocker ceux à l'application de la suspension et de les restaurer lorsque l'application est au premier plan à nouveau.
OriginalL'auteur Joris Mans