8

私はこの主題がここSOで多くの注目を集めていることを知っていますが、「解決策」のどれも私のために働いていません。状況は次のとおりです。

  1. iPadは私の机の上で平らで(デバイスの向きを上に向けて)、ホーム画面は完全に読みやすくなっていますが、ホームボタンは上にあります。つまり、これは「縦向き逆さま」のインターフェイスの向きを効果的に示しています。

  2. アプリを起動します

  3. アプリはbeginGeneratingDeviceOrientationNotifications、加速度計が機能していることを確認するために呼び出し、方向通知が届きます。

  4. 起動時に、私のアプリは「インターフェースの向き」と「デバイスの向き」の両方を照会します。結果は次のとおりです。

     STARTUP ORIENTATION:
         INTERFACE ORIENTATION: UIInterfaceOrientationPortrait
         DEVICE ORIENTATION: UIDeviceOrientationFaceUp
    

    Appleのドキュメントによると、各アプリ(インターフェース?)は縦向きで始まるので、これは理にかなっているかもしれません。これは実際に表向きであるため、デバイスの向きも正しいです。

  5. 起動直後に、最初のオリエンテーション通知が届きます。

    NOTIFICATION 1: 
        INTERFACE: UIInterfaceOrientationPortrait   
        DEVICE: UIDeviceOrientationPortrait
    

    繰り返しになりますが、インターフェイスの縦向き(これは私が期待するものとは逆で、ホーム画面が上下逆向きで表示されました)、デバイスも縦向きであると言われています(そうではありませんが、これは明らかにですデバイスが上向きまたは下向きのときにアプリのコンテンツを方向付ける方法を理解するための巧妙なスキーム)。

  6. 多くの人が言及しているように、別の(2つではなく1つだけの)オリエンテーション通知が続きます。

    NOTIFICATION 2: 
        INTERFACE: UIInterfaceOrientationPortrait   
        DEVICE: UIDeviceOrientationFaceUp
    

    インターフェイスの場合はまだ向き(上下逆ではない)で、デバイスの場合は上向きになります(これは正しいです)。

私のアプリはそれ自体を正しく調整し、上下逆に表示されますが、これは完全に間違っています。

iPadのホーム画面やその他のUIに表示されている、最後の既知の方向を知るにはどうすればよいですか?

これは、ウィンドウとビューだけを備えたOpenGLアプリです。UIViewControllerをミックスに追加して、これがより正確な情報を提供するかどうかを確認しましたが、それはまったく同じであり、間違っています。私はこれに苦労している開発者は私だけではないことを知っています。iPadにある多くのアプリも間違っているので、デバイスを傾けて適切な向きにする必要があります。しかし、一部のアプリそれを正しく理解しているようですが、秘密は何ですか?

4

1 に答える 1

4

わかりました。iOS デバイス/インターフェイスの向きという迷路の中で重要な部分を見落としていたことを認めざるを得ないのは残念です。それUISupportedInterfaceOrientationsは、アプリの Info.plist ファイルのプロパティです。

私はそれについて読み、(誤って) サポートされている向きを指定しても動作は変わらないと思い込んでいました。しかし、結局のところ、方向通知の単なるフィルターではありません (そうではありません。サポートされていない方向の通知を受け取ります)。通知の種類/順序は、デバイスの向きによって異なります。

私の場合、「上向き」と「下向き」の向きには興味がなかったので、無視しました。これは良い考えではありません。サポートされている方向を明示的に指定する場合:

<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

これを Apple 側のバグと呼びたくはありませんが、 を指定しないと、渡された向きNOTIFICATION 1が常に向きになる理由がよくわかりませんUISupportedInterfaceOrientations

これは iPad にのみ適用されることに注意してください。iPod Touch と iPhone のホーム画面の UI は常に縦向きになっているため、起動時の向きを簡単に知ることができます (ご想像のとおり、縦向き) ...

于 2011-06-10T14:59:07.053 に答える