Domanda

Ho un'animazione personalizzata segue che si verifica quando si spinge un nuovo controller della vista nello stack. Quando popping il controller della vista che è stato presentato a detta segue personalizzati, tuttavia, l'animazione controller di navigazione di default accade (cioè, l'attuale Animates View Controller a destra, mentre il controller della vista genitore traduce sullo schermo dal bordo sinistro).

Quindi la mia domanda è questa: c'è un modo per scrivere un segue di animazione pop personalizzato che avviene quando schioccare un controller della vista dallo stack?

Modifica (soluzione):

Ho finito per la definizione di una segue personalizzato simile alla risposta selezionata. Nella Storyboard, ho trascinato un segue personalizzato dal punto di vista del bambino di controllo di nuovo al suo genitore, dato un identificatore e la segue inverso appena scritto come sua classe. Sì, mi rendo conto che è praticamente identico a una transizione modale. Requisiti client hanno reso necessaria questa follia, quindi prima i commenti di chiunque, di capire che so non si dovrebbe avere a che fare questo in circostanze normali.

- (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];
  }];
}
È stato utile?

Soluzione

Sì. Ecco un esempio in cui ho pop al livello superiore. Quando il vostro creare la segue in Storyboard. Utilizzare selezionare o immettere la nuova nuova classe segue nel Attributi.

//
//  FlipTopPop.h

#import <UIKit/UIKit.h>


@interface FlipTopPopToRoot : UIStoryboardSegue

@end

e

//  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

Se si desidera pop-up solo cambiamenti di uso di un livello Questa segue personalizzato:

//  PopSegue.h

#import <UIKit/UIKit.h>

@interface PopSegue : UIStoryboardSegue

@end

e

//  PopSegue.m

#import "PopSegue.h"

@implementation PopSegue

- (void) perform {

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

@end

Altri suggerimenti

Per tutti coloro che seguendo questo ora, iOS 7 consente di animare in entrambi i modi:

Imposta la segue a spingere, poi vedere il codice qui sotto per un'implementazione spinta.

https://github.com/Dzamir/OldStyleNavigationControllerAnimatedTransition

Come il commentatore Linus ha sottolineato, le altre soluzioni presentate creerà un'altra istanza della UIViewController. Credo che questo link qui descrivere altre alternative per consentire animazioni Segue inversa.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top