xcode Utility App テンプレートに基づいて単純なユーティリティ アプリを作成しています。FlipsideViewController の向きを、FlipsideViewController が呼び出されたときのデバイスの向きのみに制限したいと考えています。これを行う最も簡単な方法は何ですか? 私はいくつかの異なる方法でそれを試みましたが、これまでのところすべて失敗しています。ありがとう...
1 に答える
まず、現在の方向を取得します。
- (void) viewDidAppear: (BOOL) animated
{
eLockOrient = self.interfaceOrientation;
}
次に、それ以外を禁止します。
- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation
{
if (eLockOrient == 0)
return true;
return (interfaceOrientation == eLockOrient);
}
追加: さらにテストを行ったところ、シミュレーターとデバイスの起動方向に関して、動作に大きな違いがありました。デバイスは正しく動作しているように見えますが、シミュレーターはそうではありません。シミュレーターをランドスケープ モードにすると、アプリの起動時に、シミュレーターは、回転する必要があることをアプリに伝えるためにアプリ メッセージを送信することを覚えていないようです。シミュレーターは、それが横向きであることを認識しません。以下は、sim とデバイスからのトレースです。
デバイス:
[TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=4 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=4 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=4 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=4 [TiAeManageSearchesVC.shouldAutorotate]
シミュレーター:
[TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.shouldAutorotate] intfOrient=1 [TiAeManageSearchesVC.viewDidAppear] self.intfOrient=1
したがって、上記のコードは、記録されたログ メッセージを除いて機能します。物理デバイスでのソリューションを改善するために、次の行を追加しています。これにより、ログのエラー メッセージが削除されます。
if (eLockOrient == 0)
return true;
そうでなければ、問題はシミュレーターにあると思います。アプリがシミュレーターにロードされたときに最初のビューに対してテストしようとすると、これらの問題が発生します。後続のビューをテストしましたが、次のようにすると正しく機能します。
- アプリを起動します。
- シミュレーターを回転させます。
- 2 番目のビューに進みます。