允许QLPreviewController的旋转独立于父视图

时间:2012-09-24 22:42:45

标签: iphone ios rotation qlpreviewcontroller

我的应用不支持轮播。但我想提出一个支持轮换的QLPreviewController。 我像这样提出QLPreviewController

[self presentModalViewController:thePrevController animated:NO];

我该怎么做?

1 个答案:

答案 0 :(得分:3)

启用应用程序plist文件中的所有旋转。这将使所有视图都旋转,而与视图控制器中的设置无关。

然后将您的根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的旋转。从CustomNavContoller推送视图的应用程序的其余部分将不会随着CustomNavigationController被锁定而旋转。

我在视图控制器的顶部添加了这个接口和实现,我想在那里展示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中都可以使用。

希望它有所帮助。