【问题标题】:Allow Rotation for QLPreviewController independent of parent View允许独立于父视图的 QLPreviewController 旋转
【发布时间】:2012-09-24 22:42:44
【问题描述】:

我的应用不支持旋转。但我想介绍一个支持旋转的QLPreviewController。 我这样介绍QLPreviewController

[self presentModalViewController:thePrevController animated:NO];

我该怎么做?

【问题讨论】:

    标签: iphone ios rotation qlpreviewcontroller


    【解决方案1】:

    在您的应用程序 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 启用旋转。由于 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。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      相关资源
      最近更新 更多