您的位置:首页 > 其它

视频播放如何横竖屏切换

2015-08-01 00:08 609 查看
最近一直在做视频相关的项目,其中一个很重要的功能就是播放时的横竖屏切换,于是研究对比了下市场上主要视频类APP的横竖屏切换方式,共分为两种,一种以优酷视频和土豆视频为代表,当横放手机时整个界面都旋转了,另一种以腾讯视频,搜狐视频为代表,当横放手机时只是播放的小视图旋转,其余内容不变。实现方法分别如下。

1 优酷视频的横竖屏切换的实现方法

首先控制整个viewcontroller的view支持横竖屏切换的几个方法

- (BOOL)shouldAutorotate{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return UIInterfaceOrientationPortrait;
}


然后添加监测屏幕方向变化的通知

- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationHasChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
}


接着在通知的回调方法中操作如下

- (void)orientationHasChange:(NSNotification *)notification{
UIDevice *device = (UIDevice *)notification.object;
if(device.orientation == UIInterfaceOrientationLandscapeLeft){
[self rotateToLandscapeLeft];
}
else if(device.orientation == UIInterfaceOrientationLandscapeRight){
[self rotateToLandscapeRight];
}
else if(device.orientation == UIInterfaceOrientationPortrait){
[self rotateToPortrait];
}
}
- (void)rotateToFullScreen{
if(SCREEN_WIDTH>SCREEN_HEIGHT){
_videoPlayManageView.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
}
else{
_videoPlayManageView.frame = CGRectMake(0, 0, SCREEN_HEIGHT, SCREEN_WIDTH);
}
[_videoPlayManageView enterInFullScreen];
}
- (void)rotateToLandscapeLeft{
if(_lastOrientationValue==UIInterfaceOrientationLandscapeLeft){
return;
}
[self rotateToFullScreen];
_lastOrientationValue = UIInterfaceOrientationLandscapeLeft;
}
- (void)rotateToLandscapeRight{
if(_lastOrientationValue==UIInterfaceOrientationLandscapeRight){
return;
}
[self rotateToFullScreen];
_lastOrientationValue = UIInterfaceOrientationLandscapeRight;
}
- (void)rotateToPortrait
{
if(_lastOrientationValue==UIInterfaceOrientationPortrait){
return;
}
_videoPlayManageView.frame = _normalScreenFrame;
[_videoPlayManageView exitFromFullScreen];
_lastOrientationValue = UIInterfaceOrientationPortrait;
}


最后,如果想强制播放器横屏或者竖屏播放,可以这样

- (void)videoPlayManageViewExitFullScreenButtonTapped{
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];
}
[UIViewController attemptRotationToDeviceOrientation];
}
- (void)videoPlayManageViewEnterFullScreenButtonTapped{
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 = UIInterfaceOrientationLandscapeRight;
[invocation setArgument:&val atIndex:2];
[invocation invoke];
}
[UIViewController attemptRotationToDeviceOrientation];
[self rotateToLandscapeRight];
}


OK,大功告成。

PS:demo完整版下载地址为:
https://github.com/wangqi211/VideoPlayDemo.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息