UIViewController无法旋转。方法未被调用。

4
问候,
这个问题似乎在iphone SDK的世界中一直存在...所以这是我的贡献...
我有两个不同的项目来自同一个模板...一个半工作,另一个根本不工作... 请让我解释一下我的步骤...
使用这个基本的GL ES模板 //iphonedevelopment.blogspot.com/2008/12/opengl-project-template-for-xcode.html 必须解决一些“发布”配置,但是其他方面有我需要添加方向到GL ES项目的所有内容。
在我的第一个项目中,完成了我的工作,然后添加了这些方法...
-(BOOL)shouldAutoRotateToInterfaceOrientation .....   
-(void)willRotateToInterfaceOrientation ....
-(void)didRotateFromInterfaceOrientation ....
-(void)willAnimateRotationToInterfaceOrientation ....

了解它们的功能(或在我的情况下尝试执行的功能),当视图控制器创建时,将调用(BOOL)should...方法一次,并返回“YES” 。但是在此之后,不会调用任何其他方法!
因此,我从空白模板(从上面获取的GL ES模板)重新开始……并添加最少量的支持自动旋转。但是这次没有调用任何方法!
因此,我进行了调查…… //developer.apple.com/iphone/library/qa/qa2010/qa1688.html 如上所述,我首先添加了GLViewController.view,然后将GLview作为应用程序委托的子视图添加。仍然没有反应!
然后我发现了这个 //www.iphonedevsdk.com/forum/iphone-sdk-development/44993-how-determine-ipad-launch-orientation.html 其指出需要启用方向通知。
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

然后在视图控制器中禁用它们...这样做很有道理...我试了一下,什么也没有发现...
我认为通知可能是默认开启的,因为我在第一个项目中不需要启用它们,但它仍然尝试验证方向(即(BOOL)shouldAutoRotate...)...
如果有人能帮我解决这个问题,我将非常感激,因为这个问题让我发疯了。提前致谢。
代码可以在这里找到... http://rapidshare.com/files/392053688/autoRotation.zip 注意:这些项目避免使用nib/xib资源,如果可能的话,希望保持这种方式。
附注:我所在的地方还没有iPad设备,所以我无法在设备上测试。希望在模拟器上能够正常工作。
2个回答

4

好的,经过几次撞墙后,尝试手动操作...哈利路亚...

所以这是结果... 在视图控制器创建时添加这两行代码... 例如在-(void)loadView或相当的方法中

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selectot(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];

将 (void)should.... 设置为返回 YES

-(void)shouldRotateToInterfaceOrienation
{
return YES;
}

删除所有...

-(void)willRotateToInterfaceOrientation ....
-(void)didRotateFromInterfaceOrientation ....
-(void)willAnimateRotationToInterfaceOrientation ....

这些不需要...

然后添加一个名为didRotate的方法

-(void)didRotate:(NSNotification*)notification
{
UIDeviceOrientation oreo = [[UIDevice currentDevice] orientation];
// oreo is our new orientation!
}

基本上,问题在于我只是草率地尝试使用beginGeneratingDeviceOrientationNotifications方法使其工作。我还需要“捕获”方向事件并自行处理它们...
对于那些想知道为什么的纯粹主义者,我不知道或不理解为什么,请见谅...理论上它应该能够工作,但实际上没有。

谢谢,这似乎有效。我对旋转方法感到非常沮丧——有一天,其中一种方法会起作用,而另一天又会有不同的方法起作用,原来的方法则完全不起作用。希望使用您提供的通知将继续有效。谢谢。 - IcyBlueRose

0

我在didRoateToInterfaceOrienataion方法不总是被调用上遇到了很多麻烦。shouldRotateToInterfaceOrientation方法总是被调用,但有时候状态栏会旋转到横向,但视图控制器不会旋转,并且didRotateTo...方法也不会被调用。我尝试重写NavigationController以支持didRotateTo..,但我不想让NavigationController中的所有视图都支持旋转。

最后我确定的是,在支持旋转的视图之前的视图也必须支持旋转。你可能认为问题只会发生在那个之前的视图上,但不知怎么的问题消失了,这是唯一的变化。

此外,http://developer.apple.com/library/ios/#qa/qa1688/_index.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接