私は今本当に混乱しています。私はこれを行うリンゴのサンプルコードを使用しました:
- ポートレートビューコントローラーとランドスケープビューコントローラーを作成します
- 次に、Potraitイベントコントローラーは、デバイスの向きが変更された通知を登録します
- デバイスを回転させると、ランドスケープビュー用のモーダルビューコントローラが表示されます。ポートレートに戻すと、ランドスケープビューが表示されなくなります。
少しの問題を除いて、すべてが正常に機能しています...。
今私の問題に。これを使用して、テーブルビューから回転可能なビューコントローラを起動しました。回転させることができ、正常に動作します。ただし、最初に横向きモードで起動した場合でも、縦向きで起動します。横向きにしたい場合は、後でもう一度横向きに回転させる必要があります。これを修正するために非常に懸命に努力しましたが、失敗しました。こちらのAppleDeveloperSiteからサンプルコードをダウンロードして実行できます。ランドスケープモードで起動した場合にランドスケープビューのモーダルビューが表示されるように、このコードを修正できますか?それ以外の場合は、単一のViewControllerを使用するためにすべてを書き直す必要があります。これらはリンゴのコードの関連部分です:
- (void)viewDidLoad
{
self.view.backgroundColor = [UIColor colorWithRed:197.0/255.0 green:204.0/255.0 blue:211.0/255.0 alpha:1.0];
LandscapeViewController *viewController = [[LandscapeViewController alloc]
initWithNibName:@"LandscapeView" bundle:nil];
self.landscapeViewController = viewController;
[viewController release];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
// We must add a delay here, otherwise we'll swap in the new view
// too quickly and we'll get an animation glitch
[self performSelector:@selector(updateLandscapeView) withObject:nil afterDelay:0];
}
- (void)updateLandscapeView
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
{
[self presentModalViewController:self.landscapeViewController animated:YES];
isShowingLandscapeView = YES;
}
else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
{
[self dismissModalViewControllerAnimated:YES];
isShowingLandscapeView = NO;
}
}
// override to allow orientations other than the default portrait orientation
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{return (interfaceOrientation == UIInterfaceOrientationPortrait); // support only portrait}