iPhone が標準の「縦」の向きにあるときに 1 つのビューを表示し、横向きに回転したときに別のビュー (グラフなど) に切り替えるにはどうすればよいでしょうか。
質問する
350 次
2 に答える
3
そのビューの方向を無効にします (最初のビューが横向きであると仮定します)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)||(interfaceOrientation == UIInterfaceOrientationLandscapeRight); }
次に、これをviewDidAppearに追加します
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
そして、このメソッドをどこかに追加します
- (void) orientationChanged:(NSNotification *)note
{
UIDevice * device = note.object;
switch(device.orientation)
{
case UIDeviceOrientationPortrait:
// Present View Controller here
break;
default:
break;
};
}
もう一方のビューでも同じことを行いますが、ポートレートの現在の代わりにランドスケープの却下を逆にします。
通知の登録を忘れずに解除してください。
(または、両方のコントロールを備えたナビゲーション ビューを使用しますが、バーは使用せず、使用する向きに応じて必要なものを表示します)
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
于 2012-06-19T00:56:57.943 に答える
1
最初に UIViewController の仕組みを読んでください: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html
次に、UIViewController サブクラスで、 を利用willRotateToInterfaceOrientation:duration:
してビューを変更します。
例えば
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
// if portrait
[self.landscapeView removeFromSuperview];
[self.view addSubview:self.portraitView];
// if landscape
[self.portraitView removeFromSuperview];
[self.view addSubview:self.landscapeView];
}
そして、適切なif
ステートメントまたはswitch
ケースを追加して、どちらを行うかを決定します。
于 2012-06-19T00:52:58.157 に答える