5

だから....私はちょうど午後をこれに費やし、さまざまな投稿を見て、これを機能させるためにたくさんのことを試みましたが、運がありませんでした。私はこれを可能な限り単純なケースに戻しましたが、それでも機能しないようです。

この単純なシナリオでは、UINavigationControllerと単一の初期ビューコントローラーのみを含むストーリーボードがあります。 ここに画像の説明を入力してください

IOS 6での自動回転メソッドの変更に関するすべての投稿を見て、UINavigationControllerのサブクラスを作成し、このサブクラスと最初のビューコントローラーの両方にshouldAutorotateメソッドとsupportedInterfaceOrientationsメソッドを実装しました。

ナビゲーションコントローラー:

// NavController.h
#import <UIKit/UIKit.h>

@interface NavController : UINavigationController

@end

// NavController.m
#import "NavController.h"

@interface NavController ()

@end

@implementation NavController

- (BOOL) shouldAutorotate {
    return YES;
}

- (NSUInteger) supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

@end

最初のコントローラー

// FirstController.h
#import <UIKit/UIKit.h>

@interface FirstController : UIViewController

@end

// FirstController.m
#import "FirstController.h"

@interface FirstController ()

@end

@implementation FirstController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

@end

プロジェクト設定では、すべての回転をサポートする必要があると指定されています。 ここに画像の説明を入力してください

これはどれも効果がないようです...!これをシミュレーターで実行すると、次のようになります。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

お願いします..!ここで何が欠けていますか?これは私を夢中にさせています!少なくともこの単純なケースを機能させたいので、かなり大きなアプリが機能することを期待できます。

4

3 に答える 3

11

すべてのビュー コントローラーの回転を有効または無効にする場合は、UINavigationController をサブクラス化する必要はありません。代わりに次を使用します。

   -(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 

AppDelegate で。

アプリですべての向きをサポートするが、親ビュー コントローラー (UINavigationController スタック) で異なる向きをサポートする予定がある場合は、使用する必要があります。

   -(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 

親View Controllerの次のメソッドと組み合わせて。

    - (BOOL)shouldAutorotate

- (NSUInteger)supportedInterfaceOrientations

ただし、同じナビゲーション スタック (私のように) 内の異なる Children ViewController で異なる方向設定を行う予定がある場合は、ナビゲーション スタック内の現在の ViewController を確認する必要があります。

UINavigationController サブクラスで次のものを作成しました。

    - (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    int interfaceOrientation = 0;

    if (self.viewControllers.count > 0)
    {
        id viewController;
        DLog(@"%@", self.viewControllers);
        for (viewController in self.viewControllers)
        {
            if ([viewController isKindOfClass:([InitialUseViewController class])])
            {
                 interfaceOrientation = UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
            }
            else if ([viewController isKindOfClass:([MainViewController class])])
            {
                 interfaceOrientation = UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
            }
            else
            {
                 interfaceOrientation = UIInterfaceOrientationMaskAllButUpsideDown;
            }
        }
    }
    return interfaceOrientation;
}

子ViewControllersから提示されたView Controllerの回転設定を制御することはできなくなるため、現在ナビゲーションスタックにあるView Controllerを何らかの方法でインターセプトする必要があります。それが私がしたことです:)。それが役立つことを願っています!

于 2012-09-23T21:13:45.560 に答える
1

メソッドを投稿してくださいAppDelegate->didFinishLaunchingWithOptions

次のようになります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//    // Override point for customization after application launch.
//    self.window.backgroundColor = [UIColor whiteColor];
//    [self.window makeKeyAndVisible];
    return YES;
}
于 2012-09-24T05:58:15.283 に答える
1

提案してくれてありがとう....何時間も掘り下げた後、何が間違っているのかがようやくわかりました。

何らかの理由で、プロジェクト設定ですべての向きをサポート対象として指定したにもかかわらず、Xcode はアプリの Info.plist を適切に更新していませんでした!

私が作成したサンプル プロジェクトの場合、Xcode は、Supported Interface Orientations (iPad) ディクショナリに 2 つの値のみを追加しました。

 - Portrait (top home button)
 - Portrait (bottom home button)

不足している 2 つの向きを追加することで、最終的にアプリが正しく回転するようになりました。

 - Landscape (left home button)
 - Landscape (right home button)

ここに画像の説明を入力

これらが正しく設定されていない理由はわかりません。なんてイライラする日でしょう!

ご協力いただきありがとうございます。

于 2012-09-24T06:21:14.303 に答える