视频播放如何横竖屏切换
2015-08-01 00:08
609 查看
最近一直在做视频相关的项目,其中一个很重要的功能就是播放时的横竖屏切换,于是研究对比了下市场上主要视频类APP的横竖屏切换方式,共分为两种,一种以优酷视频和土豆视频为代表,当横放手机时整个界面都旋转了,另一种以腾讯视频,搜狐视频为代表,当横放手机时只是播放的小视图旋转,其余内容不变。实现方法分别如下。
1 优酷视频的横竖屏切换的实现方法
首先控制整个viewcontroller的view支持横竖屏切换的几个方法
然后添加监测屏幕方向变化的通知
接着在通知的回调方法中操作如下
最后,如果想强制播放器横屏或者竖屏播放,可以这样
OK,大功告成。
PS:demo完整版下载地址为:
https://github.com/wangqi211/VideoPlayDemo.git
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
相关文章推荐
- DVI 视频接口图文解析
- C#实现字体旋转的方法
- 基于jQuery实现的旋转彩圈实例
- C++实现一维向量旋转算法
- C#调用mmpeg进行各种视频转换的类实例
- C#获取视频某一帧的缩略图的方法
- 使用JavaScript实现旋转的彩圈特效
- C#中图片旋转和翻转(RotateFlipType)用法分析
- 显示youtube视频缩略图和Vimeo视频缩略图代码分享
- Android Tween动画之RotateAnimation实现图片不停旋转效果实例介绍
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- PHP使用ffmpeg给视频增加字幕显示的方法
- PHP实现将视频转成MP4并获取视频预览图的方法
- C++实现优酷土豆去视频广告的方法
- PHP简单获取视频预览图的方法
- asp.net 页面中添加普通视频的几种方式介绍
- Android实现屏幕旋转方法总结
- Android获取SD卡上图片和视频缩略图的小例子
- php使用memcoder将视频转成mp4格式的方法
- 基于js与flash实现的网站flv视频播放插件代码