web-dev-qa-db-ja.com

状態パターンは、横向きモードと縦向きモードのUI変更を実装するための優れたソリューションですか?

IOSアプリの場合、複雑なUIロジックの多くは、ViewControllerのインターフェイスの向きに依存します。この条件付きロジックは多くの場所に存在します。

オブジェクトの形でさまざまな状態に分離できますか?

2

UIViewControllerはこれを直接処理できます。

ほとんどのビューのフレームが(ViewControllerで)同時に設定されていると仮定し、すべてのフレーム設定コードを移動します1つのメソッドに

-(void)setAllFrames;

このメソッドは、現在のインターフェイスの向きに従って各サブビューのフレームを設定するため、向きに基づいて各フレームを決定するロジックが含まれます。したがって、ビューが最初に読み込まれるときに[self setAllFrames];を呼び出すと、すべてのフレームがインターフェイスの向きに応じて適切に調整されます。

インターフェイスの向きが変わったら、そのメソッドを呼び出すだけです。

2
Korey Hinton

はい、 State Pattern を利用して、各UIウィジェットのレイアウトロジックを方向に応じて個別のクラスに分離できます。ただし、これによりUIウィジェットのクラス数が3倍になる可能性があり、向きが変わるたびに多くのウィジェットが再作成される可能性があることに注意してください。

上記のパターンを使用する場合は、各Widgetが適切に定義されていることを確認してから、landscapeWidgetから継承する個別のportaitWidgetオブジェクトとwidgetオブジェクトを用意してください。 _。 (両方に非レイアウトコードを配置するのではなく、 コピーアンドペーストプログラミング になります。)


もちろん、AppleがiOS DVRまたはiOSウォッチをリリースしたときに、最終的にUIを再度調整する必要があることを認識してください。定義したほうがよい場合があります。個々のUI要素に個別のクラスを持たせるのではなく、UIを整理し、そこにすべてのレイアウトロジックを含めるlayoutManager。個々のウィジェット要素にXとYの量を伝え、持たないようにします。画面全体を心配させます。

1
DougM