手动设置竖屏:修改currentDevice orientation需要在setStatusBarOrientation前
bool IsIOS8 = NO; float version = [[[UIDevice currentDevice] systemVersion] floatValue]; if (version >= 8.0) { IsIOS8 = YES; } //改设备方向 //if (IsIOS8) { [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"]; //} [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
UIApplication需要实现方法或者监听UIApplicaionDelegate委托回调
方法 1)UIApplication需要实现
-(NSUInteger)supportedInterfaceOrientations { UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation]; UIInterfaceOrientation statusBarOrientation =[UIApplication sharedApplication].statusBarOrientation; if(deviceOrientation == UIDeviceOrientationPortrait || deviceOrientation == UIDeviceOrientationPortraitUpsideDown){ if(statusBarOrientation != UIInterfaceOrientationPortrait ||statusBarOrientation != UIInterfaceOrientationPortraitUpsideDown){ return 0; } } // otherwise return UIInterfaceOrientationMaskLandscape; }
方法 2)UIApplicaionDelegate委托接口
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation]; UIInterfaceOrientation statusBarOrientation =[UIApplication sharedApplication].statusBarOrientation; if(deviceOrientation == UIDeviceOrientationPortrait || deviceOrientation == UIDeviceOrientationPortraitUpsideDown){ if(statusBarOrientation != UIInterfaceOrientationPortrait ||statusBarOrientation != UIInterfaceOrientationPortraitUpsideDown){ return 0; } } // otherwise return UIInterfaceOrientationMaskLandscape; // UIInterfaceOrientationMaskAll // it is the safest way of doing it: // - GameCenter and some other services might have portrait-only variant // and will throw exception if portrait is not supported here // - When you change allowed orientations if you end up forbidding current one // exception will be thrown // Anyway this is intersected with values provided from UIViewController, so we are good //return (1 << UIInterfaceOrientationPortrait) | (1 << UIInterfaceOrientationPortraitUpsideDown) //| (1 << UIInterfaceOrientationLandscapeRight) | (1 << UIInterfaceOrientationLandscapeLeft); }