横屏竖屏切换

项目只有竖屏的时侯,在某个页面强制横屏
模态的形式推入:

/**
 强制横屏

 @param application application
 @param window window
 @return value
 */
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
//_allowRotation为定义的公共变量
    if (_allowRotation == 1)  {
        return UIInterfaceOrientationMaskLandscapeRight;
    }
    else {
        return (UIInterfaceOrientationMaskPortrait);
    }
}

在此页面进行强制转屏

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
   return interfaceOrientation == UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotate {
   return YES;
}

- (UIInterfaceOrientationMask )supportedInterfaceOrientations
{

       return UIInterfaceOrientationMaskPortrait;

}

转屏页面

- (void)viewDidLoad {
   [super viewDidLoad];
   
   [self creadUI];
   
   AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
   appDelegate.allowRotation = 1;
  
   // Do any additional setup after loading the view.
}

-(UIInterfaceOrientationMask)supportedInterfaceOrientations{
   //return YES;
   return UIInterfaceOrientationMaskLandscapeRight;
   
}

- (BOOL)shouldAutorotate
{
   return  NO;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

push:推入
此类继承UINavigationController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil];
}


- (BOOL)shouldAutorotate
{
    return [self.topViewController shouldAutorotate];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return [self.topViewController supportedInterfaceOrientations];
}

- (void)deviceOrientationDidChange
{
    NSLog(@"NAV deviceOrientationDidChange:%ld",(long)[UIDevice currentDevice].orientation);
    if([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait) {
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
        [self orientationChange:NO];
        //注意: UIDeviceOrientationLandscapeLeft 与 UIInterfaceOrientationLandscapeRight
    } else if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft) {
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
        [self orientationChange:YES];
    }
}

- (void)orientationChange:(BOOL)landscapeRight
{
    CGFloat width = [UIScreen mainScreen].bounds.size.width;
    CGFloat height = [UIScreen mainScreen].bounds.size.height;
    if (landscapeRight) {
        [UIView animateWithDuration:0.2f animations:^{
            self.view.transform = CGAffineTransformMakeRotation(M_PI_2);
            self.view.bounds = CGRectMake(0, 0, width, height);
        }];
    } else {
        [UIView animateWithDuration:0.2f animations:^{
            self.view.transform = CGAffineTransformMakeRotation(0);
            self.view.bounds = CGRectMake(0, 0, width, height);
        }];
    }
}

转屏类

- (void)interfaceOrientation:(UIInterfaceOrientation)orientation
{
   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                  = orientation;
       // 从2开始是因为0 1 两个参数已经被selector和target占用
       [invocation setArgument:&val atIndex:2];
       [invocation invoke];
   }
}
- (BOOL)shouldAutorotate
{
   return NO;
}

//如果需要转屏调用此方法
- (void)leftAction
{
   [self interfaceOrientation:UIInterfaceOrientationPortrait];
}

你可能感兴趣的:(横屏竖屏切换)