3

私のアプリは回転をサポートしていません。QLPreviewControllerしかし、私は回転をサポートするを提示したいと思います。私はQLPreviewControllerこのように提示します:

[self presentModalViewController:thePrevController animated:NO];

これどうやってするの?

4

1 に答える 1

3

アプリケーションのplistファイルですべてのローテーションを有効にします。これにより、View Controllerの設定に関係なく、すべてのビューが回転します。

次に、ルートUINavigationControllerを以下のようにサブクラス化し、要件に応じてiOS5および6の回転制御コードを追加します。

古いアプリをMainWindow.xibで更新していたので、xibファイルのナビゲーションコントローラーのクラスをCustomNavigationControllerに変更しました。ただし、メインメニューなどの最新のアプリでは、次のようにナビゲーションコントローラーをインスタンス化します。

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.

MainMenuVC *masterViewController = [[MainMenuVC alloc] initWithNibName:@"MainMenuVC" bundle:nil];
self.navigationController = [[CustomNavigationController alloc] initWithRootViewController:masterViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];

サブクラスUINavigationController

#import <UIKit/UIKit.h>

@interface CustomNavigationController : UINavigationController

@end

#import "CustomNavigationController.h"

@interface CustomNavigationController ()

@end

@implementation CustomNavigationController

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

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

@end

次に、QLPreviewコントローラーをサブクラス化して、QLPreviewControllerのみのローテーションを有効にするローテーションコードをオーバーライドできるようにします。CustomNavigationControllerがロックされているため、CustomNavContollerからプッシュされたビューを持つアプリの残りの部分は回転しません。

QLPreviewControllerを表示したいビューコントローラーの上部に、このインターフェイスと実装を追加しました。

@interface RotatingQLPreviewController : QLPreviewController

@end

@implementation RotatingQLPreviewController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

@end

次に、サブクラスを使用してQLPreviewControllerを提示します。

RotatingQLPreviewController *preview = [[RotatingQLPreviewController alloc] init];
        preview.dataSource = self;
        [self presentViewController:preview
                           animated:YES
                         completion:^(){
                             // do more stuff here
                         }];

この方法は、回転させたい他のモーダルビューでも機能するはずですが、私は試していません。

私が取り組んでいる最新のアプリにこのメソッドを実装し、iOS5と6の両方で動作します。

それが役に立てば幸い。

于 2012-11-08T17:23:09.730 に答える