1

UIView が画面全体を引き継いで画像を表示するようにしたいのですが、ほとんどの場合、メインのアプリ機能に UISplitViewController を使用しています。これを行うための推奨/ベストプラクティスの方法はありますか? 現在、メイン ウィンドウへのポインターがあり、UIView をサブ ビューとして追加して前面に表示するだけですが、適切な向きで表示されません。もっと良い方法/私が見逃している簡単なものがあるかどうか疑問に思っていました。

ありがとう。

4

2 に答える 2

1

私はしばらくの間、この同じ問題に苦労し、不格好な回避策を考え出しました. 私の解決策の前に、障害に関する背景をもう少し説明します。

  • iPhone OS では、ルート ビューの座標は常に、物理画面の文字どおりの固定座標にあります。「アップ」は常にデバイスが稼働中です。サブビューは、指定された方向に変換された座標を取得する必要があるため、「上」が期待されるもの、つまり重力の上になります。
  • したがって、UIView をビュー階層の最上位 (UIScrollView の上) に配置するには、方向イベント中にこれらの変換を自分で行う必要があります。フルスクリーンになりますが、サブビューの方向座標を管理する scrollView の利点が失われます。
  • ビューをscrollView内に保持すると、Mac OSのようにsplitViewのペインを単純に折りたたむ簡単な方法はありません。ヘッダー ファイルを確認すると、幅の管理に使用されるプライベート インスタンス メソッドがいくつか見つかります。

したがって、できることは、2 つの「方向認識」ビュー コントローラー (1 つの splitView、1 つのフルスクリーン) を維持し、それらを切り替えて、フルスクリーンに切り替えるときにそれらの間でビューを移動することだと思います。私はこのルートには行きませんでした。なぜなら、これはメモリとビューの階層に関して明らかに厄介な状況だからです。

私がしているのは、メイン ビューの「ほぼフルスクリーン」の幅と通常の分割幅を切り替えることです。これは、splitView の丸みを帯びた角が実際には、splitView のサイズに関係なく描画されるハードコードされた画像であることを除いて、うまく機能します。これらの小さな黒い丸い角は 100% の確率で表示されます。効果は次のとおりです。

- (IBAction)toggleFullscreen:(id)sender; {
id appDelegate = [[UIApplication sharedApplication] delegate];
UISplitViewController *split = [appDelegate splitViewController];

//get master and detail view controller
UIViewController *master = [split.viewControllers objectAtIndex:0];
UIViewController *detail = [split.viewControllers objectAtIndex:1];

//In landscape permit fullscreen
if(self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
   self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    CGRect f = detail.view.frame;
    if ( f.origin.x == 0 ) { //exiting fullscreen
        [sender setImage:[UIImage imageNamed:@"SlideLeft.png"]];
        //adjust detail view
            f.size.width = 703;
            f.origin.x = 321;
        [detail.view setFrame:f];

        //adjust master view
            f = master.view.frame;
            f.size.width = 320;
            f.origin.x = 0;
        [master.view setFrame:f];       

    } else { //entering fullscreen
        [sender setImage:[UIImage imageNamed:@"SlideRight.png"]];
        //adjust detail view
            f.size.width = 1024;
            f.origin.x = 0;     
        [detail.view setFrame:f];

        //adjust master view
        f = master.view.frame;
            f.size.width = 1;
            f.origin.x = -1;
        [master.view setFrame:f];
    }       
}
}

ここや他のソースからこのコードをたくさん入手しましたが、私が知る限り、この実装はユニークです。不完全だからでしょう。

于 2010-06-03T15:46:55.343 に答える
1

分割ビューコントローラーから提示したモーダルビューコントローラーを使用することになりました。次に、許可される方向を -shouldAutorotateToInterfaceOrientation で指定します。ステータスバーも非表示にします。これは私のニーズに合っています。

于 2010-07-12T16:56:31.807 に答える