2010-05-17 105 views
0

当我正在使用的应用程序通过Ad-Hoc或通过iTunes直接安装到设备上时,首次启动时,唯一的视图控制器在我的应用程序中,响应方向更改不会接收调用shouldAutorotateToInterfaceOrientation:并传入横向参数;调试显示它只被调用肖像。随后的每次发射都会按照我的预期进行 - 也就是说,有对shouldAutorotateToInterfaceOrientation:的调用都会使用横向和纵向参数进行调用。这种确切的行为可以在iPhone模拟器,iPhone和iPod touch上看到。应用程序安装后首次启动时,shouldAutorotateToInterfaceOrientation不起作用

所以我的问题是:为什么第一次启动应用程序的方向通知不同于以后每次启动时的方向通知?我错误地认为除了对shouldAutorotateToInterfaceOrientation:做出响应之外,我无法控制方位变化?

的视图控制器内的问题:

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
return YES; 
} 

viewDidLoadviewDidUnload里面我有(分别):

 
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

 
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 

更新2010年7月6日:

仍然没有运气解决问题。我将这个问题搁置了一会儿,然后又回到了这个问题上,在完全不同的情况下我仍然看到了这个问题。任何人?

更新2010年7月13日:

从苹果公司的View Controller Programming Guide

” ...... window对象确实有很大改变电流方向相关的工作[...]具体而言,它与视图控制器一起工作,该视图控制器的根视图最近添加到或呈现在窗口中,换句话说,窗口对象仅与显示视图的最前面的视图控制器一起工作...“

一世在第一次发布时,与之后的每次发布相比,在不同窗口添加根视图控制器的时间是不同的,所以我想也许它与此有关。我还没有追溯到这里,尽管......只是一个想法。

这个东西已经在这次更新时有大约175个视图...没有人甚至有最遥远的暗示建议?来吧,把东西扔出去。我愿意在这一点上接受任何猜测或建议。我不在乎这是愚蠢的晦涩或可能不相关。

+0

我有各种与UI的定位问题,并看到很多报道说,它是固定在不同的版本:

我有以下变化beginGeneratingDeviceOrientationNotifications尽快解决这一点。你链接什么库?也许试试以后的库,看看是否更好。 – Andiih 2010-05-17 19:38:25

+0

iPhone OS 3.0和链接http://i996.photobucket.com/albums/af85/jtrim/Screenshot2010-05-17at43542PM.png 我会尝试增加我的构建目标,看看它是怎么运行的 – jtrim 2010-05-17 20:37:34

+0

你不需要在视图控制器中调用begin/endGeneratingDeviceOrientationNotifications。 shouldAutorotateToInterfaceOrientation将被调用而不这样做。 – progrmr 2010-05-17 20:51:30

回答

2

从未解决过这个问题 - 在我有机会之前,我离开了我遇到的公司。但是,我离开的时候,我有一个很好的领先优势。我联系了Apple DTS了解了这个问题,他们指出为了使自动旋转正常工作,与自动旋转相关的视图堆栈中的所有ViewController必须调用方法实现中的超级方法(即从ViewController的viewDidLoad内调用[super viewDidLoad])。我不记得他们引用了哪些方法,但可能值得一试,以确保您在适当情况下正确呼叫super

[编辑]如果有人可以证实这一点,我会将其标记为接受的答案。谢谢!

0

也确保你设置:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
// Return YES for supported orientations 
return YES;} 

ALL ViewControllers.m在您的应用程序,而不是一个你的工作(如果你有一个以上的)。我努力试图为FirstViewController工作,但无论如何它都无法工作。只要我将上面的代码添加到所有四个视图控制器,它开始工作得很好(在所有四个)

+0

那么如果你有一些视图控制器不应该自动旋转?这当然是一个有效的场景。 – jtrim 2010-11-16 18:03:49

+0

我想,它不适用于此。 – TrekOnTV2017 2010-11-22 23:52:54

0

我有一个类似的问题 - UIDevice.h标题列出endGeneratingDeviceOrientationNotifications和beginGeneratingDeviceOrientationNotifications作为“可嵌套”。事实证明,我对这些方法的调用不平衡。

if (![[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]) 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
相关问题