Comment faire disparaître une modale VC avec le fondu de l'animation?
Je suis en utilisant le code suivant dans ma présentation VC à s'estomper dans l'enfant modal VC, et cela fonctionne très bien:
self.infoViewController.view.alpha = 0.0;
[self.navigationController presentModalViewController:self.infoViewController animated:NO];
[UIView animateWithDuration:0.5
animations:^{self.infoViewController.view.alpha = 1.0;}];
Cependant je n'arrive pas à s'estomper, j'ai essayé quelques petites choses, c'est le dernier que j'ai essayé ne fonctionne pas:
- (IBAction)dismissAction:(id)sender
{
if ([[self parentViewController] respondsToSelector:@selector(dismissModalViewControllerAnimated:)])
{
[[self parentViewController] dismissModalViewControllerAnimated:YES];
self.parentViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
self.parentViewController.view.alpha = 0.0;
[UIView animateWithDuration:0.5
animations:^{self.parentViewController.view.alpha = 1.0;}];
} else
{
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
self.presentedViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
self.presentedViewController.view.alpha = 0.0;
[UIView animateWithDuration:0.5
animations:^{
self.presentedViewController.view.alpha = 1.0;}];
}
}
Le modèle-vue-contrôleur est disparu immédiatement, mais pas sur une période de temps comme c'est lors de son affiche.
Si vous ne souhaitez que ce code fonctionne sur les appareils plus tôt que iOS 5, vous aurez besoin de protéger l'appel à
Si vous êtes témoins d'un avis de rejeter l'animation, c'est sûr qu'il sonne comme ce code est arriver exécuté et qu'il se fait rejeté par un autre chemin.
presentedViewController
ainsi que dismissModalViewControllerAnimated
.Si vous êtes témoins d'un avis de rejeter l'animation, c'est sûr qu'il sonne comme ce code est arriver exécuté et qu'il se fait rejeté par un autre chemin.
OriginalL'auteur Gruntcakes | 2012-01-21
Vous devez vous connecter pour publier un commentaire.
Ce (pièce d'origine) n'est pas à prendre à partir de H2CO3 la réponse correcte.
UIModalTransitionStyleCrossDissolve
fait à peu-près exactement l'effet que vous recherchez. Vous êtes tout simplement pas le réglage de la modalTransitionStyle jusqu'à la fin. Remplacer l'ensemble de votre code avec ces fonctions là positions respectives:Modifier en réponse à la synchronisation d'être un problème: parlons le code incriminé. Nous allons nous concentrer uniquement sur le si vrai en partie, car c'est en substance identique à l'autre.
Si vous êtes à la recherche d'un accord réciproque de l'animation ce n'est pas ça. Dans l'original de votre animation, vous définissez la vue suivante de l'alpha à 0, puis présenté à la prochaine vue-contrôleur, puis le mettre de vue de l'alpha à 1. Donc, logiquement, vous avez besoin de rejeter le point de vue du contrôleur de l'animation; C'est très facile à l'aide de blocs. Le code devrait ressembler à quelque chose comme ceci:
Cette ligne de code anime le point de vue de l'alpha à 0, alors (à l'achèvement) rejette, à la vue du contrôleur, et définit l'affichage de l'alpha à 1. C'est la réciprocité de l'animation.
Édité en réponse au commentaire
Il semble que dans iOS8, vous devez ajouter l'auto.modalTransitionStyle = UIModalTransitionStyleCrossDissolve également sur presentingViewController, afin de rejeter également CrossDissolve
OriginalL'auteur NJones
Dans les docs de UIViewController, nous pouvons trouver:
Définissez cette propriété sur
UIModalTransitionStyleCrossDissolve
et il va se dissoudre correctement 🙂Espère que ça aide.
[auto.parentViewController dismissModalViewControllerAnimated:YES];
Réglage d'Animation: OUI fait défiler off, réglage d'Animation: ou PAS en fait dissoudre, mais toujours immédiatement. J'ai posté mon code plus tard, dans une édition ci-dessus.
Ce marquage comme acceptée que de réponses, le titre de ma requête, même si je suis toujours à la recherche de la réponse quant à la façon de parvenir à s'estomper avec la durée.
OriginalL'auteur
Je suppose, cela peut être utile pour ceux héroïque gars, qui essaie toujours d'utiliser MPMoviePlayerViewController en mode plein écran et de l'orientation, qui diffère de l'application principale.
J'ai passé littéralement la moitié de la journée de travail de jouer avec la présentation de MPMoviePlayerViewController modal ou non modal. Mais il n'y a pas de chance avec ça, dans le sens de l'animation de transition en train de changer. (Le mode modal nécessaire pour le réglage de l'orientation, ce qui diffère de l'application majeure de l'orientation).
J'ai essayé presentViewController ou presentModalViewController, mais le résultat est le même. Quel que soit le type est le modalTransitionStyle bien ensemble, si je ne [... dismissViewControllerAnimated:véritable ...] puis par défaut du style de transition (UIModalTransitionStyleCoverVertical) utilisé de toute façon. Je l'ai testé que sous iOS 5.1 appareil et dans iOS 6 Simulateur.
Je n'ai pas essayé d'autres types de contrôleurs... Considérant que la commune contrôleur a la méthode dismissMoviePlayerViewControlleranimated, je peux supposer, que cette méthode est utilisée de toute façon pour licencier un contrôleur vidéo, peu importe comment se fait-il apparaître. (À l'entrée de transitions n'a pas fonctionné pour moi aussi, sauf qu'ils n'ont pas de processus de CoverVertical (en cas de modalTransitionStyle changer).
Donc, ma solution a été pas utiliser l'animation de transition à tous les.
J'en suis sûr, Apple avait quelques raisons pour autoriser uniquement certaines d'animation pour MovieViewController (je l'espère vraiment, et qui a été faite non pas à cause de "la paresse"), mais si ils voulaient une belle expérience utilisateur obtiendrait, ils n'ont pas, comme dans mon application qui est encore mieux quand la vidéo s'affiche sans aucune animation (qui est pire que CrossDisolving pour vous en assurer), mais c'est mieux que de banal CoverVertical.
À la recherche de développeur de point de vue, il sonne vraiment comme ils dépensent beaucoup plus d'argent pour les concepteurs de peinture nice icônes pour les clients au lieu de plus agréable et plus efficace le travail des développeurs. (
OriginalL'auteur Agat