项目中有一个页面需要播放视频,整体类似爱奇艺的视频详情页面,当然需要有播放器的所有功能,包括全屏。
爱奇艺页面
一种方法是通过旋转播放器视图并改变frame来实现
// 全屏
playerview.transform = CGAffineTransformMakeRotation(M_PI/2);
//然后修改播放器和播放器上控件的frame
...
// 退出全屏
playerview.transform = CGAffineTransformMakeRotation(0);
//然后修改播放器和播放器上控件的frame
...
这样写因为手机的方向其实并没有改变,还是竖屏,所以状态栏不会跟着旋转,需要做一些隐藏状态栏什么的操作。
另外一种方法:
首先设置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
...