Frage

Ich habe eine benutzerdefinierte Animation, die beim Schieben eines neuen View -Controllers auf den Stapel auftritt. Wenn der Ansichtscontroller, der mit diesem benutzerdefinierten Segue präsentiert wurde, jedoch die Standard-Navigation-Controller-Animation erfolgt (dh der aktuelle Ansichtscontroller animiert nach rechts, während der übergeordnete Ansichtscontroller auf dem Bildschirm von der linken Kante übersetzt).

Meine Frage lautet also: Gibt es eine Möglichkeit, eine benutzerdefinierte Pop -Segue -Animation zu schreiben, die beim Aufschlagen eines View -Controllers vom Stapel passiert?

Bearbeiten (Lösung):

Am Ende habe ich einen benutzerdefinierten Segue definiert, der der ausgewählten Antwort ähnlich ist. In der Storyboard zog ich einen benutzerdefinierten Segue vom Child View Controller zurück zu seinem übergeordneten, gab ihm einen Kennung und den neu geschriebenen Reverse Segue als seine Klasse. Ja, mir ist klar, dass es praktisch identisch mit einem modalen Übergang ist. Die Kundenanforderungen erforderten diesen Wahnsinn. Bevor jemand kommentiert, verstehen Sie, dass ich weiß, dass man dies unter normalen Umständen nicht tun muss.

- (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];
  }];
}
War es hilfreich?

Lösung

Ja. Hier ist ein Beispiel, in dem ich auf die oberste Ebene bin. Wenn Sie den Übergang in Storyboard erstellen. Verwenden Sie die neue neue Segue -Klasse im Attribute Inspector aus oder geben Sie die neue Segue -Klasse ein oder geben Sie sie ein.

//
//  FlipTopPop.h

#import <UIKit/UIKit.h>


@interface FlipTopPopToRoot : UIStoryboardSegue

@end

und

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

Wenn Sie nur eine Ebene ändern möchten, verwenden Sie diesen benutzerdefinierten Segue:

//  PopSegue.h

#import <UIKit/UIKit.h>

@interface PopSegue : UIStoryboardSegue

@end

und

//  PopSegue.m

#import "PopSegue.h"

@implementation PopSegue

- (void) perform {

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

@Ende

Andere Tipps

Für alle, die jetzt dies folgen, können Sie in iOS 7 in beide Richtungen animieren:

Stellen Sie den Segue auf Push ein und sehen Sie dann den Code unten für eine Push -Implementierung.

https://github.com/dzamir/oldstylenavigationControlleranimatedTransition

Wie der Kommentator Linus betonte, werden die anderen vorgestellten Lösungen eine weitere Instanz des UiviewController erstellen. Ich denke, dieser Link hier beschreibt andere Alternativen zur Aktivierung von Animationen mit reversen Segue.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top