it-swarm.com.de

Segue-Animation deaktivieren

Ich möchte Segues in meinem Storyboard anzeigen (z. B. Push), um meine Viewcontroller und meinen Navigationscontroller zu verbinden. Dann werden die Navigationsleisten auf den Viewcontrollern korrekt angezeigt. Beispiel: Mit Show Detail oder Present Modaly verschwindet die Navigationsleiste

Aber ich möchte keine Segue-Animation. Xcode gibt folgende Warnung aus: "Das Deaktivieren der Segue-Animation ist vor iOS 9.0 nicht verfügbar."

Und ich möchte das Bereitstellungsziel von iOS 7.0 oder 8.0

Wie kann ich das lösen?

Danke im Voraus.

11
codeDude

Sie können Animationen deaktivieren, bevor Sie das Segue ausführen und nachdem Sie es erneut aktivieren.

UIView.setAnimationsEnabled(false)
self.performSegueWithIdentifier("next", sender: nil)
UIView.setAnimationsEnabled(true)

Dadurch wird die Überblendung ohne Animation ausgeführt.

21
Arbitur

Ich habe mit der Swift-Antwort in diesem Thread eine benutzerdefinierte Überblendung erstellt:
Segue in Xcode ohne Animation schieben

So:

class ShowNoAnimationSegue: UIStoryboardSegue {

    override func perform() {
        let source = sourceViewController as UIViewController
        if let navigation = source.navigationController {
            navigation.pushViewController(destinationViewController as UIViewController, animated: false)
        }
    }
}

Und in Xcode habe ich im Attributes Inspector der benutzerdefinierten Segmente das Kontrollkästchen "Animates" (JA) aktiviert. Jetzt ist die Warnung weg, deshalb beantworte ich meine eigene Frage.

Ich bin mir noch nicht sicher, ob es eine dauerhafte Lösung ist.

3
codeDude

Klicken Sie auf den Pfeil neben Main.Storyboard und dann auf:

 enter image description here

Check out Animates

3
Orkhan Alizade

Wenn Sie den Animationsstatus im Code ändern möchten, können Sie Ihren Abschnitt im Storyboard mit verschiedenen Bezeichnern und demselben Ursprung und Ziel duplizieren. Dann machen Sie eines der Themen-Animationen und das andere nicht. Führen Sie dann "performSegue" mit dem gewünschten Bezeichner aus.

class MyNavigationController : UINavigationController {

    var firstTransitionAnimated : Bool = true // or false, based on initialization


    override func viewDidLoad() {
        super.viewDidLoad()
        var properSegue = firstTransitionAnimated ? "animated_segue" : "not_animated_segue"
        self.performSegue(withIdentifier: properSegue, sender: self)
    }
}
0
Abbas Sabeti