2011-06-08 50 views
7

我知道這個主題在這裏得到了很多關注,但沒有一個「解決方案」正在爲我工​​作。這裏的情況:iPad設備朝向總是錯的時候平板

  1. iPad是平放在我的辦公桌上(面朝上設備方向),主屏幕是完全可讀,但home鍵是在上面。所以這是有效地展示了一個「肖像朝下」界面的方向。

  2. 我開始我的應用程序

  3. 應用程序調用beginGeneratingDeviceOrientationNotifications以確保加速度計工作,並定向通知進來,

  4. 在啓動時,我的應用程序查詢兩個「接口方向」和「設備方向」。結果是:

    STARTUP ORIENTATION: 
        INTERFACE ORIENTATION: UIInterfaceOrientationPortrait 
        DEVICE ORIENTATION: UIDeviceOrientationFaceUp 
    

    蘋果的文檔說,每個應用程序(界面?)縱向開始,所以這可能是有意義的。設備方向也是正確的,因爲這確實是正面朝上。

  5. 右鍵發射後,第一方位通報未來:

    NOTIFICATION 1: 
        INTERFACE: UIInterfaceOrientationPortrait 
        DEVICE: UIDeviceOrientationPortrait 
    

    再次,肖像爲接口,(這是違揹我的期望,在主屏幕上表現出來了起來側(這並非如此,但這顯然是一個聰明的方案,用於在設備面朝上或朝下時如何定位應用的內容)。

  6. 正如許多人都提到,另一個(只有一個,不是兩個)方向通知如下:

    NOTIFICATION 2: 
        INTERFACE: UIInterfaceOrientationPortrait 
        DEVICE: UIDeviceOrientationFaceUp 
    

    不過肖像(而不是上下顛倒)的接口,並回到正面朝上該設備的(這是正確的)。

我的應用程序正確調整自己,並顯示朝下,這是完全錯誤的。

我該怎麼做才能知道最後一個已知的方向,這是iPad上的主屏幕和其他用戶界面顯示的方向?

這是一個只有一個窗口和一個視圖的OpenGL應用程序。我已經添加了一個UIViewController來看看它是否提供了更準確的信息,但它是一樣的,也是錯誤的。我知道我不是唯一一個在這方面掙扎的開發者,因爲我iPad上的許多應用程序也做錯了,你必須傾斜設備,使它們正確定位。但一些應用似乎得到它的權利,什麼祕密?

+0

我對IPad開發一無所知,但如何當設備平坦時,物理上可能檢測到「方向」? – 2011-06-08 23:24:28

+0

奧利,我後來的,我沒有真正清楚,是最後一次知道的方向,就是iPad UI中顯示的方向。我會添加這個。 – zmippie 2011-06-08 23:25:52

+0

您確定顯示方向的代碼是否正確?如果設備是平的,它應該保持相同的方向(除非你的應用程序不支持它)。 – ughoavgfhw 2011-06-09 00:53:13

回答

4

好吧,我不開心了就必須承認,我確實忽視在爲iOS設備/接口方位迷宮中不可或缺的一部分:在您的應用程序的Info.plist文件中UISupportedInterfaceOrientations屬性。

我讀過它並(錯誤地)認爲通過指定支持的方向,行爲不會改變。但事實證明,這不僅僅是定向通知的過濾器(它不是,您仍然會收到不支持的定向通知),但通知的類型/順序取決於設備的定向方式。

就我而言,我對「正面朝上」和「正面朝下」方向不感興趣,所以我只是無視它們。這是不是一個好主意。如果指定了明確的支持方向:

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

...那麼你仍然會看到的行爲,因爲我在評論上述描述:

「從本質上講,該設備是假裝的用戶真的很快搖了搖回到直立的位置,然後退後。「

...但第一次通過的方向不是總是縱向,而是正確的方向。

所以,在場景我在我的問題描述,該設備方向將是如下:

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

我不想去遠,並呼籲蘋果公司的這個錯誤,但是我不清楚爲什麼當你沒有指定UISupportedInterfaceOrientations時,爲什麼NOTIFICATION 1中的傳遞方向總是縱向

請注意,這僅適用於iPad。 iPod Touch和iPhone上的主屏幕UI始終處於縱向狀態,因此更容易知道啓動時的方向(您猜對了:縱向)...

相關問題