【iOS】PresentModalViewControlを正しく使用

4118 ワード

Present ViewController Modally 
一、主な用途
ポップアップモードViewControllerはIOS化において有用な技術であり、UIImagePickerControllerなどのモード表示専用のViewControllerを提供する.ポップアップモードViewControllerは、主に次のような状況で使用されます.
1、ユーザー入力情報の収集
2、一時的にいくつかの内容を提示する
3、一時的に作業モードを変更する
4、該当設備の方向変化(異なる方向に対してそれぞれ2つのViewControllerを考えている場合)
5、新しいviewレベルを表示する
これらの状況では、プログラムの正常な実行プロセスが一時的に中断され、主な役割は情報の収集または表示です.
二、いくつかの概念と常用設定
1、presenting view controller Vs presented view controller
我々がview controller Aにview controller Bをモード表示すると、Aはpresenting view controller(VCをポップアップ)として機能し、Bはpresented view controller(VCをポップアップ)である.公式ドキュメントでは、この2つの間でdelegateによるインタラクションが推奨されています.UIImagePickerControllerを使用してシステムアルバムから写真を選択したり、写真を撮ったりした場合、imagePickerControllerとそれをポップアップしたVCの間でUIImagePickerControllerDelegateによるインタラクションが実現されていることがわかります.したがって,実際の応用では,この原則を遵守し,ポップアップされたVCでdelegateを定義し,ポップアップVCでエージェントを実現することで,両者の相互作用を比較的容易に実現できることが望ましい.
2、Modal Presentation Styles(ポップアップスタイル)
presenting VCのmodalPresentationStyleプロパティを設定することで、View Controlをポップアップするときのスタイルを設定できます.以下の4つのスタイルが定義されています.
typedef enum {
    UIModalPresentationFullScreen = 0,
    UIModalPresentationPageSheet,
    UIModalPresentationFormSheet,
    UIModalPresentationCurrentContext,
} UIModalPresentationStyle;

UImodalPresentationFullScreenはVCをポップアップする場合、presented VCはフルスクリーンで、VCをポップアップするwantsFullScreenLayoutがYESに設定されている場合、ステータスバーの下に埋め込まれます.そうしないとステータスバーの下には埋め込まれません.
UImodalPresentationPageSheet代表ポップアップがVCである場合、presented VCの高さは現在の画面の高さと同じであり、幅と縦画面モードでは画面の幅が同じであり、残りのカバーされていない領域は暗くなり、ユーザーのクリックを阻止する.このポップアップモードでは、縦画面ではUImodalPresentationFullScreenの効果と同様に、横画面では両側に暗くなる領域が残る.
UImodalPresentationFormSheetこのモードでは、presented VCの高さと幅はいずれもスクリーンサイズより小さくなり、presented VCが中央に表示され、周囲に暗い領域が残ります.
UImodalPresentationCurrentContextというモードでは、presented VCのイジェクト方式はpresenting VCの親VCと同じです.
この4つの方法はiPadの上ですべて有効ですが、iPhoneとiPod touchの上でシステムは常にUIModalPresentationFullScreenモードでpresented VCを表示しています.
3、Modal Transition Style(ポップアップ時のアニメーションスタイル)
presenting VCのmodalTransitionStyleプロパティを設定することで、presented VCをポップアップするときのシーン切り替えアニメーションのスタイルを設定できます.定義は次のとおりです.
typedef enum {
        UIModalTransitionStyleCoverVertical = 0,
        UIModalTransitionStyleFlipHorizontal,
        UIModalTransitionStyleCrossDissolve,
        UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;

底からスライドしたり、水平に反転したり、交差したり、ページをめくったりする4つのスタイルがあります.この4つのスタイルは、iPhoneでもiPadでも指定したスタイルに基づいて回転効果を表示するデバイスの制限を受けません.
4、Dismiss Modal ViewController(消えたVC)
presented VCを消去し、次の2つの関数のいずれかを呼び出すことで完了できます.
dismissModalViewControllerAnimated:                 //
dismissViewControllerAnimated:completion:

誰がこの消失presented VCを呼び出すこの方法:正しい方法は“誰が誰を汚染して誰が管理します”で、つまりpresenting VCは上の方法を呼び出してpresented VCの表示を取り消します.これには、VCが本当にユーザーがしない異なる選択が異なるview controllerをポップアップする可能性があり、ポップアップされたview controllerを表示する必要がなくなった場合に[self]を直接呼び出すという利点がある. dismissModalViewControllerAnimated]は、具体的に表示されているview controllerの種類に関心を持つことなく、消去することができます.もちろん、システムはここで最適化されています.presented VCで上記の方法を呼び出すと、システムは自動的にこのメッセージを対応するpresenting VCに伝えます.これにより、誰が自分をポップアップしても、不要になったときに自分を消す機能を実現することができます.アプリケーションでは、presented VCがpresenting VCとデータ転送を必要とする場合は、presenting VCで実装されるエージェント関数でdismissがポップアップするview controllerを具体的に採用することをお勧めします.