3 Stimmen

Animation der Navigationsleiste deaktivieren

Ich arbeite an einer navigationsbasierten Anwendung. Ich habe einige View-Controller, die ich in den Navigations-Controller bei verschiedenen Gelegenheiten schieben. Im Folgenden ist der Code, den ich verwende, um einen neuen View Controller zu pushen.

AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherView" bundle:nil];
[self.navigationController pushViewController:anotherViewController animated:YES];
[anotherViewController release];

Eine Sache, die ich bemerkt habe, ist, dass, wenn neue View-Controller geschoben wird die Navigationsleiste auch animiert (Slide). Ich habe eine Zurück-Schaltfläche, Titeltext und rechte Taste in der Navigationsleiste. Also es seltsam aussehen, wenn die Navigationsleiste animiert wird.

Gibt es eine Möglichkeit, die Navigationsleiste zu fixieren und die Ansicht nur zu animieren, wenn ein neuer Viewcontroller geschoben wird?

0voto

Gerd Punkte 31

Ich habe viele verschiedene Methoden ausprobiert, aber nichts hat funktioniert. Schließlich benutze ich einen Workaround:

1) Übergeben Sie die aktuelle Ansicht (self.view) des ersten View-Controllers an den zweiten View-Controller 2) Mache einen pushViewController mit z.B. einem Fade-Übergang. Setze den zweiten Viewcontroller als Delegierten der Animation, um den zweiten Controller zu informieren, wenn der Übergang beendet ist 3) In viewDidLoad des zweiten Viewcontrollers speichere den View des zweiten Viewcontrollers und setze den View des ersten Viewcontrollers als self.view

Nun sollte die Anzeige wie der Inhalt des ersten Viewcontrollers mit der Navigationsleiste (und ggf. Symbolleiste) des zweiten aussehen.

Führen Sie schließlich im zweiten View-Controller (in der Delegate-Methode der Animation) den Übergang aus, den Sie für den Inhalt durchführen möchten, z. B. "Flip".

Im Grunde genommen funktioniert das. Ich habe noch einige Probleme mit der korrekten Position der Ansicht und Wiederherstellung der Ansicht in der ersten Ansicht Controller für meine App zu lösen.

Aber das sollte Ihnen zumindest einen Hinweis geben.

Aktualisierung: Verbleibende Probleme behoben. Es war etwas knifflig, weil sich der erste Viewcontroller in einer Scrollview befindet. Flipping aus war keine große Sache, aber Flipping zurück in eine Scroll-Ansicht ist eine böse Sache.

0voto

Krunal Punkte 73316

Schnell

Eine schwierige, aber machbare Lösung:

Sie müssen die UINavigationController Delegatmethoden, um herauszufinden, wann die UIViewController wird angezeigt. Dann wird für jede UIViewController müssen Sie eine boolesche Variable erstellen wie isInitialized Eigenschaft, mit deren Hilfe Sie bestimmen können, wann die UIViewController auf den Stack geschoben wird, oder wenn es bei der Rückkehr des nächsten View-Controllers angezeigt wird.

Ihr FirstViewController:

func navigationController(_ navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
        if viewController == self {
            if self.isInitialized {
                var navigationBarAnimation = CATransition()
                navigationBarAnimation.duration = 1.5
                navigationBarAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
                navigationBarAnimation.type = kCATransitionFade
                navigationBarAnimation.subtype = kCATransitionFade
                navigationBarAnimation.removedOnCompletion = true
                self.navigationController?.navigationBar?.layer?.addAnimation(navigationBarAnimation, forKey: nil)
                }
                else 
                {
                        self.isInitialized = true;
                }
        }
}

func navigationController(_ navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
        if viewController == self {
            if self.isInitialized {
                self.navigationController?.navigationBar?.layer?.removeAllAnimations()
            }
        }
}

Ihr SecondViewController:

func navigationController(_ navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
        if viewController == self {
            if !self.isInitialized {
                var navigationBarAnimation = CATransition()
                navigationBarAnimation.duration = 1.5
                navigationBarAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
                navigationBarAnimation.type = kCATransitionFade
                navigationBarAnimation.subtype = kCATransitionFade
                navigationBarAnimation.removedOnCompletion = true
                self.navigationController?.navigationBar?.layer?.addAnimation(navigationBarAnimation, forKey: nil)
                        self.isInitialized = true;
                }
        }
}

func navigationController(_ navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
        if viewController == self {
            if self.isInitialized {
                self.navigationController?.navigationBar?.layer?.removeAllAnimations()
            }
        }
}

-1voto

user525164 Punkte 17

Die Navigationsleiste wird beim Betrachten von Bildern in der Apple Foto-App ausgeblendet, um eine bessere Ansicht des Bildes zu ermöglichen. Das Ausblenden der Navigationsleiste ist ganz einfach. Diese Technik entspricht zwar nicht genau der Foto-App, blendet aber die Navigationsleiste ein und aus und bietet die Möglichkeit, den Übergang zu animieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X