Swiftの画面遷移後の表示まとめ
公開日: 2024-10-25 09:59:05
本日はSwiftの遷移先の画面の設定が結構あるのですが、理解できていなかったので調べてみました。
モーダル遷移には複数の種類があり、ナビゲーションコントローラー遷移では複数の種類はありませんでした。
こちらのような画面を用意しました。
まずはモーダル遷移からまとめていきます。
.fullScreen
@objc func fullScreenTransition() {
let testVC2 = TestTransitionViewController2()
testVC2.modalPresentationStyle = .fullScreen
self.present(testVC2, animated: true, completion: nil)
}presentで画面全体を覆う遷移を行います。戻るためには明示的にdismissを呼び出す必要があります。
.pageSheet
@objc func pageSheetTransition() {
let testVC2 = TestTransitionViewController2()
testVC2.modalPresentationStyle = .pageSheet
self.present(testVC2, animated: true, completion: nil)
}モーダル遷移時にiPadなど大画面でシートとして表示されます。iPhoneでは画面下から出てくるスタイルで表示されます。
.formSheet
@objc func formSheetTransition() {
let testVC2 = TestTransitionViewController2()
testVC2.modalPresentationStyle = .formSheet
self.present(testVC2, animated: true, completion: nil)
}iPadや大画面では小さなモーダルとして中央に表示され、周囲に背景が残ります。iPhoneではページシートに近い表示になります。
.overFullScreen
@objc func overFullScreenTransition() {
let testVC2 = TestTransitionViewController2()
testVC2.modalPresentationStyle = .overFullScreen
self.present(testVC2, animated: true, completion: nil)
}fullScreenと似ていますが、背景が透明なため、前の画面が透けて見えます。
.currentContext
@objc func currentContextTransition() {
let testVC2 = TestTransitionViewController2()
testVC2.modalPresentationStyle = .currentContext
self.present(testVC2, animated: true, completion: nil)
}現在のコンテキスト内にモーダル表示を行い、親ビューの一部が透けて見えることがあります。
NavigationControllerでのプッシュ遷移
// NavigationControllerでの標準的なプッシュ遷移
@objc func pushTransition() {
let testVC2 = TestTransitionViewController2()
navigationController?.pushViewController(testVC2, animated: true)
}
NavigationControllerでナビゲーションバーを非表示にして遷移
// NavigationControllerでナビゲーションバーを非表示にして遷移
@objc func pushWithoutNavigationBar() {
let testVC2 = TestTransitionViewController2()
navigationController?.isNavigationBarHidden = true
navigationController?.pushViewController(testVC2, animated: true)
}
NavigationControllerでカスタムアニメーションの遷移
// NavigationControllerでカスタムアニメーションの遷移
@objc func pushWithCustomAnimation() {
let testVC2 = TestTransitionViewController2()
let transition = CATransition()
transition.duration = 0.5
transition.type = .push
transition.subtype = .fromBottom
navigationController?.view.layer.add(transition, forKey: kCATransition)
navigationController?.pushViewController(testVC2, animated: false)
}
上から画面が下がってくるようなアニメーションになりました。