web-dev-qa-db-ja.com

セグエアニメーションの無効化

ビューコントローラーとナビゲーションコントローラーを接続するために、ストーリーボードにセグエを表示(プッシュなど)したい。その後、ビューコントローラーのナビゲーションバーが正しく表示されます。例:詳細を表示または現在のモダリティを使用すると、ナビゲーションバーが消えます

しかし、私はセグエアニメーションを望んでいません。 Xcodeは次のような警告を出します:「iOS9.0より前のセグエアニメーションの無効化は利用できません」

そして、iOS7.0または8.0の展開ターゲットが欲しい

どうすればこれを解決できますか?

前もって感謝します。

15
codeDude

セグエを実行する前と再度有効にした後、アニメーションを無効にすることができます。

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

これにより、アニメーションなしでセグエが実行されます。

25
Arbitur

Main.Storyboardのセグエ矢印をクリックしてから:

enter image description here

Animatesをチェックしてください

7
Orkhan Alizade

このスレッドでSwift回答を使用して、カスタムセグエを作成しました。
アニメーションなしでxcodeにセグエをプッシュ

そう:

class ShowNoAnimationSegue: UIStoryboardSegue {

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

また、Xcodeのカスタムセグエの属性インスペクターで、[アニメーション]チェックボックスをオンにしました(はい)。警告が消えたので、私は自分の質問に答えています。

それが耐久性のある解決策であるかどうかはまだわかりません。

3
codeDude

コードでアニメーションの状態を切り替えたい場合は、ストーリーボードでセグエを複製できます。識別子は異なり、出発地と目的地は同じです。次に、テーマの1つをアニメートし、もう1つをアニメートしないようにします。次に、目的の識別子を使用してperformSegueを実行します。

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)
    }
}
2
Abbas Sabeti