web-dev-qa-db-ja.com

shouldAutorotateToInterfaceOrientationが機能しない

私はユニバーサルアプリケーションをポートレートモードで作成してきましたが、約15のペン先ファイルと多くのviewCotnrollerの後で、shouldAutorotateToInterfaceOrientationを実装し、ランドスケープモードでいくつかの画面を設計したいと思います。

追加:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 return YES;
} 

私のすべてのviewControllersに対して、作業を行いません。

デバッグ中に、このメソッドが呼び出されていることがわかりますが、機能しません。シミュレーターにも、デバイスにも、iPhoneにも、Ipadにもありません!

私はフォーラムでいくつかの回答を検索し、使用するためのいくつかのアドバイスを見ました:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 return (interfaceOrientation == UIInterfaceOrientationPortrait ||
   interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
   interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
   interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown );
} 

どちらも機能しませんでした、

追加:

 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

そして

 [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

私のviewDidLoadとviewDidUnloadは、それぞれ機能しませんでした。

私は迷子になっています。どんな助けでもかまいません!

もう1つ情報があります... TuchUpInsideが機能する必要があるため、すべてのビューはUIControlタイプです。

あなたの助けを適用してください。

18
Dror Sabbag

すべての親ビューにautoresizesSubviews = YESがあることを確認してください。すべてのビューに対してIBでスプリングとストラットを設定していない場合は、コードでこれを行う必要がある場合があります。

Interface Builderユーザーガイドの引用:

重要:Cocoa nibファイルで、Interface Builderでビューにスプリングやストラットを設定せずに、setAutoresizingMask:メソッドを使用して実行時に自動サイズ変更動作を追加した場合でも、ビューで正しい自動サイズ変更動作が表示されない場合があります。その理由は、親ビューの子にスプリングとストラットが設定されていない場合、それらの子の自動サイズ変更がInterfaceBuilderで完全に無効になるためです。自動サイズ設定の動作を再度有効にするには、親ビューのsetAutoresizesSubviews:メソッドにYESを渡す必要があります。これを行うと、子ビューは正しく自動サイズ設定されます。

注意すべき他のいくつかの事柄:

  1. UINavigationControllerは、ルートビューコントローラーも自動回転に設定されている場合にのみ自動回転します。

  2. UITabBarControllerは、すべてのビューコントローラーが自動回転に設定されている場合にのみ自動回転します。

44
cduhn
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    UIInterfaceOrientation des=self.interfaceOrientation;

    if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //iPad
    {
        if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)//ipad-portairait
        {

        }
        else//ipad -landscape
        {

        }
    }
    else//iphone
    {
        UIInterfaceOrientation des=self.interfaceOrientation;

        if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown) //iphone portrait
        {

        }
        else //iphone -landscape
        {

        }
    }
return YES;
}
3
Vineesh TP

どのiOS用に構築していますか? iOS6.0では非推奨になりました。 (代わりに、supportedInterfaceOrientationsメソッドとpreferredInterfaceOrientationForPresentationメソッドをオーバーライドする必要があります。)

また、UIViewControllerクラスでshouldAutorotateを呼び出すこともできます。

https://developer.Apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//Apple_ref/occ/instm/UIViewController/shouldAutorotate


プロジェクト設定の[夏]タブでサポートされているインターフェイスの向きを確認してください(最上部の[プロジェクトナビゲーター]でプロジェクト名を選択します)。

ここで使用する方向を選択していない場合、シミュレーター/ iPhoneは画面の方向を変更できません。

1
Rob

...そして最後になりましたが、テストデバイスで「PortraitOrientation Locked」設定をアクティブにしていないことを確認してください(もちろん、シミュレータには適用されません)。これにより、どのアプリでも回転が無効になりますshouldAutorotateToInterfaceOrientationが戻ります。

0
newenglander

この問題が発生しましたが、iOS6では機能しましたがiOS5では機能しませんでした。ストーリーボードに、まだビューコントローラクラスを作成していないというビューがありました。

0
Tom Kincaid