私のアプリは回転をサポートしていません。QLPreviewController
しかし、私は回転をサポートするを提示したいと思います。私はQLPreviewController
このように提示します:
[self presentModalViewController:thePrevController animated:NO];
これどうやってするの?
私のアプリは回転をサポートしていません。QLPreviewController
しかし、私は回転をサポートするを提示したいと思います。私はQLPreviewController
このように提示します:
[self presentModalViewController:thePrevController animated:NO];
これどうやってするの?
アプリケーションの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の両方で動作します。
それが役に立てば幸い。