【发布时间】:2012-09-24 22:42:44
【问题描述】:
我的应用不支持旋转。但我想介绍一个支持旋转的QLPreviewController。
我这样介绍QLPreviewController:
[self presentModalViewController:thePrevController animated:NO];
我该怎么做?
【问题讨论】:
标签: iphone ios rotation qlpreviewcontroller
我的应用不支持旋转。但我想介绍一个支持旋转的QLPreviewController。
我这样介绍QLPreviewController:
[self presentModalViewController:thePrevController animated:NO];
我该怎么做?
【问题讨论】:
标签: iphone ios rotation qlpreviewcontroller
在您的应用程序 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。
希望对你有帮助。
【讨论】: