iOS单独页面旋转

项目中有一个页面需要播放视频,整体类似爱奇艺的视频详情页面,当然需要有播放器的所有功能,包括全屏。


iOS单独页面旋转_第1张图片
爱奇艺页面

一种方法是通过旋转播放器视图并改变frame来实现

// 全屏
playerview.transform = CGAffineTransformMakeRotation(M_PI/2);

//然后修改播放器和播放器上控件的frame
...

// 退出全屏
playerview.transform = CGAffineTransformMakeRotation(0);

//然后修改播放器和播放器上控件的frame
...

这样写因为手机的方向其实并没有改变,还是竖屏,所以状态栏不会跟着旋转,需要做一些隐藏状态栏什么的操作。

另外一种方法:
首先设置Xcode

iOS单独页面旋转_第2张图片
Xcode设置

然后就是这两个方法

// 这个方法返回支持的方向
-(UIInterfaceOrientationMask)supportedInterfaceOrientations{
  return UIInterfaceOrientationMaskAll
}

// 这个返回是否自动旋转
- (BOOL)shouldAutorotate{
  return NO;
}

第一个返回当前页面支持旋转的方向,第二个是是否支持自动旋转(手机方向没锁的情况下)。因为并不需要自动旋转,所以 shouldAutorotate 返回了 NO。
写完以后发现并没有什么卵用,网上有很多人也写了,这两个方法需要写在根视图,所以如果你的跟视图是这样写的

UIViewController * firstVC = [UIViewController new];
 UINavigationController *nvc = [[UINavigationController alloc]initWithRootViewController:firstVC];
 self.window.rootViewController = nvc;

就在firstVC中

-(UIInterfaceOrientationMask)supportedInterfaceOrientations{
   UINavigationController *nvc = (UINavigationController *)self.navigationController;
   return nvc.topViewController.supportedInterfaceOrientations;
}

- (BOOL)shouldAutorotate{
    UINavigationController *nvc = (UINavigationController *)self.navigationController;
    return nvc.topViewController.shouldAutorotate;
}

如果你的根视图是一个TabBarController ,就在TabBarController中

-(UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return self.selectedViewController.supportedInterfaceOrientations;
}

- (BOOL)shouldAutorotate{
    return self.selectedViewController.shouldAutorotate;
}

然后再去每个Controller中设置这两个值
最后,视频横屏全屏

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
 [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
[UIViewController attemptRotationToDeviceOrientation];

//重新设置frame
...

你可能感兴趣的:(iOS单独页面旋转)