我现在真的很乱。我使用了苹果示例代码来执行此操作:
现在我的问题。我用这个从表格视图启动一个可旋转的视图控制器。它可以旋转,工作正常。但如果我最初以横向模式启动它,它仍将作为肖像启动。如果我想要风景我必须在之后再将它旋转到风景。我试图很难解决这个但是失败了。您可以从Apple Developer Site Here下载并运行示例代码。任何人都可以修复此代码,以便在横向模式下启动时,它会呈现横向视图的模态视图吗?否则我将不得不重写所有内容以使用单个视图控制器。 这些是苹果代码的相关部分:
- (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}
答案 0 :(得分:1)
我知道这可能与您无关,但我遇到了同样的故障,这是我的解决方案。
从您设置代码的方式开始(包括Apple如何设置代码)
- (void)updateLandscapeView
只有在发出通知告诉ViewController方向改变时才会调用:这里的问题是,这是负责检查自身方向的方法。 (即启动应用程序时不调用此方法,因此不检查设备是否处于任何其他方向)
解决方案非常简单:在启动时强制校准方法,即在viewDidLoad中。 。 。
[self updateLandscapeView]
这将强制调用方法并检查接口方向,在第一次之后,当接收到更改的Orientation的通知时,将再次调用该方法
希望这有助于某人
答案 1 :(得分:0)
除非您仅在设置中指定横向,否则设备似乎会采用纵向。您唯一的选择是在loadview方法的纵向视图中检测方向并在启动期间交换视图。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown ) {
//Load vertical interface
}
else
{
//load landscape
}
}