UIView が画面全体を引き継いで画像を表示するようにしたいのですが、ほとんどの場合、メインのアプリ機能に UISplitViewController を使用しています。これを行うための推奨/ベストプラクティスの方法はありますか? 現在、メイン ウィンドウへのポインターがあり、UIView をサブ ビューとして追加して前面に表示するだけですが、適切な向きで表示されません。もっと良い方法/私が見逃している簡単なものがあるかどうか疑問に思っていました。
ありがとう。
私はしばらくの間、この同じ問題に苦労し、不格好な回避策を考え出しました. 私の解決策の前に、障害に関する背景をもう少し説明します。
したがって、できることは、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];
}
}
}
ここや他のソースからこのコードをたくさん入手しましたが、私が知る限り、この実装はユニークです。不完全だからでしょう。
分割ビューコントローラーから提示したモーダルビューコントローラーを使用することになりました。次に、許可される方向を -shouldAutorotateToInterfaceOrientation で指定します。ステータスバーも非表示にします。これは私のニーズに合っています。