Question

I ont une animation d'enchaînement personnalisé qui se produit lorsque l'on pousse un nouveau contrôleur de vue sur la pile. Lorsque sauter le contrôleur de vue qui a été présenté avec ledit Segue personnalisé, cependant, l'animation du contrôleur de navigation par défaut se produit (qui est, le contrôleur d'affichage actuel animez à droite tandis que le contrôleur de vue parent se traduit à l'écran à partir du bord gauche).

Alors, ma question est la suivante: est-il possible d'écrire une animation Segue pop personnalisée qui se produit lorsque popping un contrôleur de vue de la pile?

Edit (solution):

J'ai fini par la définition d'un Segue personnalisé similaire à la réponse choisie. Dans le storyboard, je traînais un Segue personnalisé du contrôleur vue de l'enfant à son parent, il a donné un identifiant et l'enchaînement inverse nouvellement écrit que sa classe. Oui, je me rends compte qu'il est pratiquement identique à une transition modale. Les besoins des clients ont nécessité cette folie, donc avant les commentaires de tout le monde, comprendre que je sais qu'il ne faut pas avoir à faire cela dans des circonstances normales.

- (void)perform {
  UIViewController *src = (UIViewController *)self.sourceViewController;
  UIViewController *dest = (UIViewController *)self.destinationViewController;

  [UIView animateWithDuration:0.3 animations:^{
    CGRect f = src.view.frame;
    f.origin.y = f.size.height;
    src.view.frame = f;

  } completion:^(BOOL finished){
    src.view.alpha = 0;
    [src.navigationController popViewControllerAnimated:NO];
  }];
}
Était-ce utile?

La solution

Oui. Voici un exemple où je pop au niveau supérieur. Lorsque votre créer le Segue dans Storyboard. Utilisez sélectionnez ou entrez la nouvelle nouvelle classe de Segue dans les attributs inspecteur.

//
//  FlipTopPop.h

#import <UIKit/UIKit.h>


@interface FlipTopPopToRoot : UIStoryboardSegue

@end

et

//  FlipTopPop.m

#import "FlipTopPopToRoot.h"

@implementation FlipTopPopToRoot

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
    [UIView transitionWithView:src.navigationController.view duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromBottom
                animations:^{
                    [src.navigationController popToViewController:[src.navigationController.viewControllers objectAtIndex:0] animated:NO];;
                }
                    completion:NULL];
}

@end

Si vous voulez faire apparaître un seul changement de niveau utilisent ce Segue personnalisé:

//  PopSegue.h

#import <UIKit/UIKit.h>

@interface PopSegue : UIStoryboardSegue

@end

et

//  PopSegue.m

#import "PopSegue.h"

@implementation PopSegue

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
    [src.navigationController popViewControllerAnimated:YES];
}

@end

Autres conseils

Pour tous ceux qui suivent maintenant, iOS 7 vous permet d'animer les deux sens:

Régler le Segue à pousser, puis voir le code ci-dessous pour une mise en œuvre de poussée.

https://github.com/Dzamir/OldStyleNavigationControllerAnimatedTransition

L'intervenant a souligné Linus, les autres solutions présentées va créer une autre instance du UIViewController. Je pense que ce lien ici décrire d'autres alternatives pour permettre aux animations inversées de Segue.

http://robsprogramknowledge.blogspot.com/2012/05/back- segues.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top