【问题标题】:Launching application in landscape orientation for IPad为 iPad 横向启动应用程序
【发布时间】:2010-06-01 05:45:47
【问题描述】:

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

我已经在 info.plist 中设置了方向

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

但是当我以横向模式启动 iPad 应用程序时,它总是以纵向模式启动。

沿着这条路

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{ return YES; }

帮帮我,如果我错过了什么..

谢谢,

萨加尔

【问题讨论】:

  • 如果您定义了对所有方向的支持,那么您的视图将与您的设备处于相同的模式。即如果您的设备处于纵向模式,那么您的视图将以纵向模式显示。更改设备方向也会更改视图方向。
  • 感谢 Jim 的回复。但是当方向处于横向模式时我正在启动应用程序......它仍然以纵向模式启动(即按照主页按钮的方向)。我需要在开始时实现正确的方向,因为需要显示横向屏幕或纵向屏幕。

标签: iphone ipad


【解决方案1】:

我还发现了一些东西:如果您在第一个插槽中设置了支持的界面方向和另一个方向,那么在 info.plist 中设置初始界面方向将被忽略!将您的初始方向也放在那里 - 模拟器将正确启动,应用程序也将正确启动。这让我发疯了很长时间!

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢大卫的回复。是的,设置在 info.plist 中实现。
    【解决方案3】:

    Sagar - 我遇到了同样的问题,但能够解决它。

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

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

    我注意到一个全新的向导生成的带有拆分视图控制器的简单案例,通用应用程序没有这个问题。

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

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

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

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

    【讨论】:

    • 嗨,汤姆斯威夫特。感谢您的回复..正如您所描述的,我已经实施了相同的方式。在 applicationDidFinishLaunchingWithOptions 我没有添加主窗口/事实上我正在添加启动画面,然后添加了 splitview。
    • 那么如果你添加主窗口而不是启动屏幕会发生什么?它会自行修复吗?
    • See.. 似乎解决方案是在 applicationdidfinishlauching 中让启动默认 UI [在我的情况下为 splash scree ],然后检测方向并进行视图渲染....
    • 到目前为止,在我的模拟器上工作起来就像一个魅力......稍后在真机上试试。
    【解决方案4】:

    正如许多帖子中所指出的,您必须将 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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多