平板时iPad设备的方向总是错误的

时间:2011-06-08 23:17:32

标签: ipad launch device-orientation

我知道这个主题在SO上得到了很多关注,但没有一个“解决方案”对我有用。情况如下:

  1. iPad在桌面上是平的(面朝上设备方向),主屏幕完全可读,但主页按钮位于顶部。因此,这有效地显示了“纵向向下”界面方向。

  2. 我启动了我的应用

  3. 应用程序调用{​​{1}}以确保加速度计正常工作,并且会出现方向通知。

  4. 启动时,我的应用会查询“界面方向”和“设备方向”。结果是:

    beginGeneratingDeviceOrientationNotifications

    Apple文档说每个应用程序(界面?)都是纵向开始的,所以这很有意义。设备方向也是正确的,因为这确实是正面的。

  5. 启动后,第一个方向通知即将进入:

     STARTUP ORIENTATION:
         INTERFACE ORIENTATION: UIInterfaceOrientationPortrait
         DEVICE ORIENTATION: UIDeviceOrientationFaceUp
    

    再次,界面的肖像,(与我期望的相反,主屏幕向上朝下显示),该设备据说也是纵向(不是这样,但是这显然是一个聪明的方案,可以解决当设备面朝上或朝下时如何确定应用程序内容的方向。

  6. 正如很多人提到的那样,另一个(只有一个,而不是两个)方向通知如下:

    NOTIFICATION 1: 
        INTERFACE: UIInterfaceOrientationPortrait   
        DEVICE: UIDeviceOrientationPortrait
    

    接口仍然纵向(而不是上下颠倒),然后返回设备的面朝上(这是正确的)。

  7. 我的应用程序正确调整,并且显示在一边,这是完全错误的。

    我该怎么做才能知道上次已知的方向,主屏幕和iPad上的其他用户界面显示的方向?

    这是一个只有窗口和视图的OpenGL应用程序。我已经在混合中添加了一个UIViewController来查看它是否提供了更准确的信息,但它只是相同而且错误。我知道我并不是唯一一个在这方面苦苦挣扎的开发者,因为我在iPad上的许多应用程序也做错了,你必须倾斜设备才能使它们正确定位。但有些应用似乎做对了,秘诀是什么?

1 个答案:

答案 0 :(得分:4)

好的,我很高兴不得不承认我 忽略了迷宫中的一个重要部分,即iOS设备/界面方向:应用程序信息中的UISupportedInterfaceOrientations属性.plist文件。

我读到了它并且(错误地)假设通过指定支持的方向,行为不会改变。但事实证明,它不仅仅是方向通知的过滤器(它不是,你仍然会收到不支持的 orienations的通知),但通知的类型/顺序会有所不同,具体取决于设备是面向的。

在我的情况下,我对“面朝上”和“面朝下”的方向不感兴趣,所以我只是忽略了它们。这不是一个好主意。如果明确指定支持的方向:

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationPortraitUpsideDown</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>

...然后你仍会看到我在上面评论中描述的行为:

“从本质上讲,设备假装用户真的很快将其摇回到直立位置,然后退回。”

...但是第一个传递的方向并不总是 portrait ,而是正确的方向。

因此,在我在我的问题中描述的场景中,设备方向如下:

AT STARTUP: UIDeviceOrientationFaceUp
NOTIFICATION 1: UIDeviceOrientationPortraitUpsideDown <-- CORRECT!
NOTIFICATION 2: UIDeviceOrientationFaceUp <-- CORRECT, BUT IGNORE

我不想走得那么远,并称这是苹果公司的一个错误,但我不清楚为什么NOTIFICATION 1中的传递方向总是肖像 t指定UISupportedInterfaceOrientations

请注意,这仅适用于iPad。 iPod Touch和iPhone上的主屏幕UI始终处于纵向状态,因此更容易了解启动时的方向(您猜对了: portrait )...