うるおいらんど

【Swift 3】UINavigationControllerを用いた画面遷移のアニメーション変更【CATransition】

追記があります。

どもども 以前書いた「【Swift 3】UIPageViewControllerとUINavigationControllerを使ってスワイプで画面切り替えをしよう」の続きのような続きじゃないような感じの記事になります。

UINavigationControllerを用いると画面遷移のアニメーションはスライドして切り替わるやつになります。pushかな。

 

このアニメーションをフェードなどの別のアニメーションに変更します。

 

UINavigationControllerのカスタムクラスを作ろう

前の記事で書いてることは割愛させていただきます。

pushのアニメーションを変更する場合はUINavigationControllerのカスタムクラスに以下のように書くとアニメーションを変更できます。

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        //もともとのアニメーションを削除
        self.view.layer.removeAllAnimations()
        if(animated){
            //新しいアニメーションをつける
            let transition:CATransition = CATransition()
            transition.duration = 0.25
            transition.type = kCATransitionMoveIn
            transition.subtype = kCATransitionFromTop
            self.view.layer.add(transition,forKey:kCATransition)
        }
        return super.pushViewController(viewController, animated: false)
    }

 

popの場合も同様

    override func popViewController(animated: Bool) -> UIViewController? {
        //もともとのアニメーションを削除
        self.view.layer.removeAllAnimations()
        if(animated){
            //新しいアニメーションをつける
            let transition:CATransition = CATransition()
            transition.duration = 0.25
            transition.type = kCATransitionMoveIn
            transition.subtype = kCATransitionFromTop
            self.view.layer.add(transition,forKey:kCATransition)
        }
        return super.popViewController(animated: false)
    }

 

popToRootViewController(animated:)等を使うときも同様です。

 

アニメーションの種類は transition.typeで設定できますが

・Fade ・MoveIn ・Push ・Reveal

の4種類です

 

transition.subtypeはどちら側からアニメーションをするかを設定できます。 こちらも

・FromLeft ・FromRight ・FromTop ・FromBottom

と4種類から設定できます。 durationはアニメーションにかかる時間です。

詳しくはTransition Animationでどうぞ。

 

 

わざわざこんなのを作ったり

カーソルが挙動不審すぎる

 

全部コード載せようと思ったのですが、重要なのは上記コードぐらいですし、ストーリボードも一応使っているのでコードだけで載せるのはなぁと思うのでとりあえず保留。

そのうちgithub使えるようになったらそっちに載せてリンク貼りますね・・・・。

とりあえず今は自分用メモという感じで使おうと思います。

 

オーバーライドしちゃうと全部がそのアニメーションになってしまうので部分的に変えたい場合は条件分岐すると場所によって違うアニメーションができます。

 

 

ではでは。

 

 

参考リンク

Additional Notes追記

Swift4でチェック済みでっす

Comments

コメントはありません。

現在コメントフォームは工事中です。