【swift3.0/2.3】よく使う!モーダル表示まとめ【背景透明view】
元の画面は見せつつメニューとか何かしらのviewを見せたいことってあるよね
こんな感じのやつ
※スタンプアプリをイメージ
背景を透過させてモーダル表示をすれば良いんだけど、ちょっと注意が必要なのでメモとして残しておく
書き方(iOS8以上、swift2.3)
親からviewを呼び出すとき
let viewController = UIViewController()
viewController.modalPresentationStyle = .OverCurrentContext
viewController.view.backgroundColor = UIColor.clearColor()
presentViewController(viewController, animated: true, completion: nil)
viewを閉じるとき
dismissViewControllerAnimated(true, completion: {
[presentingViewController] () -> Void in
// 閉じた時に行いたい処理
presentingViewController?.viewWillAppear(true)
})
注意点
- presentViewControllerの前にmodalPresentationStyleとbackgroundColorをセットする
- OverCurrentContextを使うと親のviewWillDisappearは呼ばれない
- viewを閉じても親のviewWillAppearは呼ばれない
→要するにviewを閉じても呼び出した時の状態のまま親viewに戻る
上記は、閉じた時に親のviewWillAppearを呼ぶようライフサイクルを変更してみてます。
上記のようにしても今のところ不具合は確認できませんでしたが
閉じた時に何か処理をさせたい場合は、処理させたいメソッドを呼び出すようにするといいかも。
おまけ①
modalTransitionStyleを指定すると画面の切り替え方をカッコよくできます!!
分かりやすくまとまってるのでオススメ☆
おまけ②
swift3.0での書き方
親からviewを呼び出すとき
let viewController = UIViewController()
viewController.modalPresentationStyle = .overCurrentContext
viewController.view.backgroundColor = UIColor.clear
present(viewController, animated: true, completion: nil)
viewを閉じるとき
dismiss(animated: true, completion: {
[presentingViewController] () -> Void in
// 閉じた時に行いたい処理
presentingViewController?.viewWillAppear(true)
})
ちょっと短くなってスッキリ♪
「.OverCurrentContext」が3.0では「.overCurrentContext」になってた。
こんなのなかなか気付かないよねw
Author And Source
この問題について(【swift3.0/2.3】よく使う!モーダル表示まとめ【背景透明view】), 我々は、より多くの情報をここで見つけました https://qiita.com/axm-aoki/items/633650922d71e1c5e750著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .