1、info中支持所有的方向
2、APPDelega.h中添加属性
@property (nonatomic,assign) BOOL allowRotate;
APPdelegate.m中实现方法
//此方法会在设备横竖屏变化的时候调用 - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { if (_allowRotate) { return UIInterfaceOrientationMaskAll; }else{ return UIInterfaceOrientationMaskPortrait; } }
3、在需要旋转的单个页面中添加
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; delegate.allowRotate = YES; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; delegate.allowRotate = NO; if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]){ SEL selector = NSSelectorFromString(@"setOrientation:"); NSInvocation * invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector]; [invocation setTarget:[UIDevice currentDevice]]; int val = UIInterfaceOrientationPortrait; [invocation setArgument:&val atIndex:2]; [invocation invoke]; } }
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { // 屏幕从竖屏变为横屏时执行 NSLog(@"屏幕从竖屏变为横屏"); }else{ // 屏幕从横屏变为竖屏时执行 NSLog(@"屏幕从横屏变为竖屏"); } } - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { // do something after rotation }
后话
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientChange:) name:UIDeviceOrientationDidChangeNotification object:[UIDevice currentDevice]];
- (void)orientChange:(NSNotification *)notification { UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; if (orientation == UIDeviceOrientationLandscapeLeft) { NSLog(@"notification: 屏幕从竖屏变为横屏"); } else if (orientation == UIDeviceOrientationLandscapeRight) { NSLog(@"notification: 屏幕从竖屏变为横屏"); } else if (orientation == UIDeviceOrientationPortrait) { NSLog(@"notification: 屏幕从横屏变为竖屏"); } }