2010-06-01 92 views
6

面向iPad应用横向方向启动应用程序时出现一个问题。 我开发了iPhone应用程序,后来我移植到iPad。以横向方式启动iPad应用程序

我已经设定关于info.plist中

[ UISupportedInterfaceOrientations~ipad ] to support all orientation UIInterfaceOrientationPortrait , UIInterfaceOrientationPortraitUpsideDown , UIInterfaceOrientationLandscapeLeft , UIInterfaceOrientationLandscapeRight. 

方向,但是当我开始在风景模式iPad应用,它总是在potrait模式启动。

沿着这

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

{ return YES; } 

帮助我,如果我缺少这个东西..

感谢,

萨加尔

+0

如果您正在定义对所有方向的支持,那么您的视图将与您的设备处于相同的模式。即,如果您的设备处于肖像模式,那么您的视图将以纵向模式显示。更改设备方向也会改变视图方向。 – Jim 2010-06-01 06:12:41

+0

感谢Jim的回复..但是当方向处于横向模式时,我开始应用...它仍然以纵向模式开始(即按照主页按钮的方向)。我需要在开始时实现正确的定位,因为需要显示横向屏幕或纵向屏幕。 – 2010-06-02 05:40:42

回答

5

萨格尔 - 我有同样的问题,但能够解决它。

与您的一样,我的应用程序作为iPhone应用程序启动,我使用XCode向导“升级”为通用应用程序。我注意到,当在实际的iPad上运行时,从横向开始,应用程序将以纵向开始,然后可能旋转到横向。在模拟器上,从横向开始,应用程序将从横向开始,然后模拟器将旋转到纵向。

在iPad上,我的应用程序是一个带有左右TabBarControllers的分割视图应用程序。每个选项卡都是返回YES到shouldAutoRotateToInterfaceOrientation的视图控制器。

我注意到一个全新的向导生成的简单案例与splitviewcontroller通用应用程序没有这个问题。

我在应用程序和简单案例中发现的区别是我没有将我的splitview控制器的视图添加到applicationDidFinishLaunchingWithOptions中的应用程序窗口。相反,我在这个阶段显示了一个“加载”视图,然后当初始化线程完成时,我会添加我的splitviewcontroller的视图(并隐藏“加载”视图)。

当我在调用applicationDidFinishLaunchingWithOptions的过程中将我的splitviewcontroller的视图添加到应用程序窗口时,一切都开始正常工作。

从applicationDidFinishLaunchingWithOptions返回时必定会发生一些魔力?

您的应用与我的类似,因为它在applicationDidFinishLaunchingWithOptions期间没有将主视图控制器的视图添加到窗口中?

+0

Hi TomSwift。谢谢你的回复..我已经实现了同样的方式,正如你所描述的那样。在applicationDidFinishLaunchingWithOptions我不添加主窗口/ infact我添加启动画面,并在此之后添加splitview。 – 2010-06-07 06:28:46

+0

那么,如果添加主窗口而不是启动画面,会发生什么情况?它是否自行修复? – TomSwift 2010-06-10 04:17:05

+0

看到它似乎解决方案,这是在应用程序dfinfinishlauching让我们开始默认的用户界面[在我的情况下飞溅scree],并在那之后检测方向和做视图渲染.... – 2010-06-14 14:02:23

9

将UISupportedInterfaceOrientations放入-Info.plist中,并为您支持的每个方向设置。这用于查看应用程序可以启动的方向。从那里开始,它会询问您的视图控制器。

+0

感谢David回复。是的设置在info.plist中实现。 – 2010-08-25 12:21:07

10

这里还有一些我也发现:如果你在第一个插槽中设置了另一个方向支持的接口方向,那么在你的info.plist中设置初始接口方向将被忽略!把你的初始定位放在那里 - 模拟器将正确启动,应用程序也一样。这让我疯狂了很久!

+0

正是我在找... – RVN 2012-02-14 15:15:53

1

正如许多帖子中指出的那样,您必须设置info.plist的支持和初始界面方向。然而,更大的问题是初始定位何时生效?答案是,当你的视图控制器收到“viewDidLoad”消息。我发现,在运行iOS 5.0的iPad-1上,只有在接收到多条“shouldAutorotateToInterfaceOrientation” 消息(此消息将UIInterfaceOrientation参数传递给接收方)后,请求的初始方向才会生效。此外,即使方向表示它处于风景模式,可能不是!我发现确保视图处于横向模式的唯一方法是测试视图高度小于视图宽度。 对我而言,策略是在收到“viewDidLoad”消息时布置我想要的子视图,但实际上是延迟将这些子视图添加到视图中,直到控制器收到有效的“shouldAutorotate ..”消息并且其方向设置为风景模式。代码看起来像这样:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
// Return YES for supported orientations 

// N.B. Even when the interface orientation indicates landscape mode 
// this may not really be true. So we insure this is so by testing 
// that the height of the view is less than the width 
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
    interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
{ 
    CGRect viewBounds = [[self view] bounds]; 
    if (viewBounds.size.height < viewBounds.size.width) 
     [self addMySubViews]; 
    return YES; 
} 
else 
    return NO; 
} 

苹果刚刚发布的iOS 5.1,所以这种行为可能已经改变。但我希望这里的代码仍然可以工作。

相关问题