0

iOS アプリでの向きの切り替えに興味があります。私が行ったすべてのチュートリアルでは、ビューを自動回転させることについて話しているだけです。横向きと縦向きのカスタム ビューを好みます。ランドスケープ ビュー コントローラーとポートレート ビュー コントローラーの作成方法を知っています。私の質問は、さまざまな向きを処理するために別のビュー コントローラーが必要ですか? もしそうなら、すべてのコードをポートレート ビュー コントローラーからランドスケープ ビュー コントローラーにコピー アンド ペーストしてから、すべてのアウトレットとアクションを新しいビュー コントローラーに接続しますか? この場合、オリエンテーション コードは別のクラス (おそらくアプリ デリゲート) に記述されており、どのビュー コントローラーにアクセスするかを指示していますか? これを調べるたびに、次のようなコードが書かれています。

if (allowLandscape) {
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation) || toInterfaceOrientation == UIInterfaceOrientationPortrait;
 }
 else {
 return toInterfaceOrientation == UIInterfaceOrientationPortrait;
 }

上記のコードでは、toInterfaceOrientation メソッドはどのように表示され、上記のコードはどこに記述されているのでしょうか? 縦向き/横向きのView Controllerのメソッドをロードしたビューにありますか、それとも別のクラスにありますか?

4

2 に答える 2

0

縦向きビューと横向きビューに別々のビュー コントローラーを使用できますが、ほとんどの場合、これは最適なソリューションではありません。これを行う方法については、このApple のドキュメントを参照してください。

向きを切り替えるときは、サブビューとビューの要素を単純に再配置するのが最善です。自動レイアウトを使用して、要素の制約を定義します。インターフェイスがかなり複雑な場合は、方向が変わる直前に、いくつかの制約を削除してニュースを追加する必要がある場合があります。インターフェイスが非常に複雑で、方向の変更時にインターフェイス要素のサイズと位置を完全に変更する必要がある場合は、ほとんどの場合、すべての制約を削除てから、新しい方向ビューのすべての新しい制約を追加する必要があります。どちらの場合でも、制約を追加および削除するときは、最適な視覚効果を得るためにwillRotatetoInterfaceOrientationビュー コントローラー メソッドで実行してください。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    [self.view removeConstraints:self.view.constraints];

    if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) ) {        
        // add landscape constraints here
    }
    else if ((toInterfaceOrientation == UIInterfaceOrientationPortrait) || (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)) {
        // add portrait constraints here
    }
}

Visual Format Language を使用して、プログラムで制約を作成します。私が VFL で見た良い記事の 1 つは、Richard Turton による Command ShiftのVisual Format Languageです。

于 2013-10-30T13:42:06.097 に答える
0

コードの重複を避けることができれば、それが常に最良の選択です。(DRY - 繰り返さないでくださいhttp://en.wikipedia.org/wiki/Don 't_repeat_yourself)

両方のレイアウトを処理できる 1 つのビュー コントローラーをできるだけ使用するようにします。縦向きと横向きでビューが大きく異なる場合は、2 つのビュー コントローラーが必要なだけかもしれません。

あなたが投稿したコードについてはわかりません。

これを見るべきです: https://developer.apple.com/videos/wwdc/2012/?id=236 彼らは、新しい iOS 6 ローテーションについて詳しく説明しています。

于 2013-03-01T23:20:59.760 に答える