Objective c 在iOS中使用单独的视图控制器支持两个方向
我现在真的一团糟。我使用了苹果的示例代码,实现了以下功能:Objective c 在iOS中使用单独的视图控制器支持两个方向,objective-c,ios,cocoa-touch,ipad,uikit,Objective C,Ios,Cocoa Touch,Ipad,Uikit,我现在真的一团糟。我使用了苹果的示例代码,实现了以下功能: 创建纵向视图控制器和横向视图控制器 Potrait事件控制器然后注册设备方向更改通知 当设备旋转时,它会为横向视图显示一个模式视图控制器,或者如果将横向视图旋转回纵向视图,则会取消横向视图。 除了一个小问题之外,一切都正常运行 现在来谈谈我的问题。我使用它从表视图启动可旋转视图控制器。它可以旋转,工作正常。但如果我最初以横向模式启动它,它仍将以纵向模式启动。如果我想要风景画,我必须在之后再次将它旋转到风景画。我很努力地修复它,但失败了。
除了一个小问题之外,一切都正常运行
- (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];
}
除非您仅在“设置”中指定“横向”,否则设备似乎采用纵向。您唯一的选择是在loadview方法的纵向视图中检测方向并在启动期间交换视图
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown ) {
//Load vertical interface
}
else
{
//load landscape
}
}
除非您仅在“设置”中指定“横向”,否则设备似乎采用纵向。您唯一的选择是在loadview方法的纵向视图中检测方向并在启动期间交换视图
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown ) {
//Load vertical interface
}
else
{
//load landscape
}
}
我知道这可能与你无关,但我只是遇到了同样的问题,下面是我的解决方案 从你的代码设置方式(包括苹果如何设置代码) 仅在发出通知告知ViewController方向更改后才会调用:这里的问题是,这是负责自身检查方向的方法。(即,启动应用程序时不会调用此方法,因此不会检查设备是否处于任何其他方向) 解决方案非常简单:在启动时强制校准方法,即在viewDidLoad中
[self updateLandscapeView]
这将强制调用该方法并检查接口方向,在第一次之后,当该方法收到更改方向的通知时,将再次调用该方法
希望这对其他人有所帮助我知道这可能与您无关,但我只是遇到了同样的问题,下面是我的解决方案 从你的代码设置方式(包括苹果如何设置代码) 仅在发出通知告知ViewController方向更改后才会调用:这里的问题是,这是负责自身检查方向的方法。(即,启动应用程序时不会调用此方法,因此不会检查设备是否处于任何其他方向) 解决方案非常简单:在启动时强制校准方法,即在viewDidLoad中
[self updateLandscapeView]
这将强制调用该方法并检查接口方向,在第一次之后,当该方法收到更改方向的通知时,将再次调用该方法
希望这能帮助别人我知道,但我做不到。上面的代码是针对iPhone的,所以这不是问题。但我正在为iPad开发。“探测然后旋转”,怎么能做到?我知道,但我做不到。上面的代码是针对iPhone的,所以这不是问题。但我正在为iPad开发。“检测然后旋转”,怎么做?