2

私の状況はこの質問に非常に似ています。iPhone が縦向き、iPad が横向きのユニバーサルなアプリがあり、appDelegate.window.rootViewController = newScreen; を使用してすべてのメイン画面を切り替えます。iPhoneアプリは完璧に動作します。iPad アプリでは、画面が横向きではなく縦向きになることがあります。サンプル遷移コードを次に示します。

AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
            ViewController* v = nil;
            if (IS_IPAD()) {
                v = [[ViewController alloc] initWithNibName:@"ViewController-iPad" bundle:nil];
            }else{
                v = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
            }
            [appDelegate.window setRootViewController:(UIViewController*)v];

私もこの他の質問からこれを試しました:

AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
            ViewController* v = nil;
            if (IS_IPAD()) {
                v = [[ViewController alloc] initWithNibName:@"ViewController-iPad" bundle:nil];
            }else{
                v = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
            }

            [UIView
             transitionWithView:appDelegate.window 
             duration:0.5
             options:UIViewAnimationOptionTransitionCrossDissolve
             animations:^(void) {
                 BOOL oldState = [UIView areAnimationsEnabled];
                 [UIView setAnimationsEnabled:NO];
                 [appDelegate.window setRootViewController:(UIViewController*)v];
                 [UIView setAnimationsEnabled:oldState];
             } 
             completion:nil];

しかし、何もそれを修正していません。

また、[appDelegate.window makeKeyAndVisable] と [appDelegate.window makeKeyWindow] を使用して、これが「ショック」を与えて正しい向きになることを期待しています。

4

1 に答える 1

4

私はそれを持っている!

これが私の遷移ブロックの外観です。私が行った重要なことは、CALayer から変換 (実際の回転を行うもの) をコピーすることでした。#import <QuartzCore/QuartzCore.h>Quartz フレームワークをファイルの先頭に含める必要があることに注意してください。

[UIView transitionWithView:self.window 
                  duration:0.5 
                   options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^{                        
    BOOL oldState = [UIView areAnimationsEnabled];
    [UIView setAnimationsEnabled:NO];
    target.view.layer.transform = window.rootViewController.view.layer.transform;
    window.rootViewController = target;
    [UIView setAnimationsEnabled:oldState];
} completion:nil];
于 2012-07-09T21:57:50.170 に答える