3

回転は iOS 5 で正常に機能していましたが、現在はまったく機能しません。特定のビューが開いているときにタブ1ですべてのビューが縦向きの例外のままになるように設定し、ユーザーが回転してカバーフロースタイルのビューを表示できるようにしました。

私のセットアップは、AppDelegate で実行時にタブバーを作成することです。次に、それをメインのルート ビューとして設定します。

self.window.rootViewController = self.tabBarController;

しかし、すべてのタブのすべてのビューが、何があっても左または右に回転するようになりました。そして、(フォーラムの複数の例から)新しいコードを追加しようとしましたが、役に立ちませんでした....すべてにブレークポイントを設定し、電話を回転させたときに回転コードが呼び出されることはありません。

各 TabController には NavigationController があり、その中にすべての UI を含むメイン ビューがあります。

iOS 6 で回転を正しく行う方法についてのアイデアや指針はありますか? これは出荷前に修正する必要がある最後の問題であるため、非常にイライラします。

4

2 に答える 2

3

これにより、稼働状態になります。最終的には、カテゴリを使用する代わりに、これらのUIKitクラスをサブクラス化する必要がありますが、残念ながら、iOS 6でまだ修正されていないサードパーティのライブラリでは機能しません。これらのカテゴリは、他の人のコードをいじくり回すことなく、すべてで機能するはずです。

サブクラス化(またはカテゴリの記述)を伴わないUITabBarControllerまたは問題の解決策はまだ見ていません。UINavigationControllerでも、存在したいのですが。

Prefix.pchファイルの先頭にある3つの.hファイル(または、すべてを1つのファイルに追加することを選択した場合は1つ)をインポートしてください。このコードができるだけ早く読み込まれることを確認する必要があります。

UITabBarController + LegacyRotation.h

#import <UIKit/UIKit.h>

@interface UITabBarController (LegacyRotation)

@end

UITabBarController + LegacyRotation.m

#import "UITabBarController+LegacyRotation.h"

@implementation UITabBarController (LegacyRotation)

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.selectedViewController supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate
{
    return [self.selectedViewController shouldAutorotate];
}

@end

UINavigationController + LegacyRotation.h

#import <UIKit/UIKit.h>

@interface UINavigationController (LegacyRotation)

@end

UINavigationController + LegacyRotation.m

#import "UINavigationController+LegacyRotation.h"

@implementation UINavigationController (LegacyRotation)

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.topViewController supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate
{
    return [self.topViewController shouldAutorotate];
}

@end

UIViewController + LegacyRotation.h

#import <UIKit/UIKit.h>

@interface UIViewController (LegacyRotation)

@end

UIViewController + LegacyRotation.m

#import "UIViewController+LegacyRotation.h"

@implementation UIViewController (LegacyRotation)

- (NSUInteger)supportedInterfaceOrientations
{
    NSUInteger ret = 0;

    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait]) {
        ret |= UIInterfaceOrientationMaskPortrait;
    }
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortraitUpsideDown]) {
        ret |= UIInterfaceOrientationMaskPortraitUpsideDown;
    }
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]) {
        ret |= UIInterfaceOrientationMaskLandscapeLeft;
    }
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]) {
        ret |= UIInterfaceOrientationMaskLandscapeRight;
    }

    return ret;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

@end
于 2012-09-23T05:26:53.883 に答える
0

ローテーションを行うために、 appDelegate に次のメソッドを追加する必要がありました

iOS 6で動作します。

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

(UIWindow *)ウィンドウ{

           return UIInterfaceOrientationMaskAll;

}

iOS 4 & 5 に関しては、まだ使用する必要があります。

(BOOL)はAutorotateToInterfaceOrientation:

               (UIInterfaceOrientation)interfaceOrientation in the specific view controller
于 2012-11-05T14:06:43.250 に答える