全局禁止横屏,但视频播放界面选择性横屏,以及引发问题的解决办法
2017-04-14 11:08
543 查看
有时我们的APP并没有适配横屏的需求,但是在个别视频播放界面,我们需要在播放视频的时候横屏,退出全屏的时候不能横屏,但是有时候并没有原生API并没有给出解决方案。
网上给出的解决办法:
在 APPDelegate.h 文件中增加属性:是否支持横屏
在 APPDelegate.m 文件中增加方法,控制全部不支持横屏
这样在其他界面想要横屏的时候,我们只要控制 allowRotation 这个属性就可以控制其他界面进行横屏了。
所以这里可以使用 UIWindow 的通知,就可以解决
在退出全屏时,增加逻辑让其强制编程竖屏,这样当全屏播放的时候,点击 down("完成") 时,就会自动变成竖屏了。
但是依旧会出现很多问题,而且网上一大堆全是如是不变的解决办法,对于这些复制粘贴,真是浪费时间,浪费感情。
按照上面的方法,确实会解决当前的问题,但是会引发更多的问题,而且有些问题很难解决。
第一,横屏退出播放后,状态栏不见了,整个APP的状态栏不见了
第二,如果项目中引入即时通讯,账号被踢,视频依旧处于播放状态,还可以继续播放,这显然是不合理的。而且还退出不了。至少我没有找到这方面的解决办法,当然可能原生控制的话比较方便吧,但是我们项目中这个模块是由html实现的,没办法时间比较急。
第三,我可能找到了更好的方法
它是由两块window来实现的,视频播放器是用一个新的window来实现的。这样的话,便有了一个新的思路,根据判断window,来解决横竖屏的问题
在APP delegate中:
但是这么写,也有一些问题,横屏退出播放后,状态栏不见了,但是其他页面没有问题
解决方法:在对应页面添加退出window的通知,其实最上面的解决办法也是基于监听新window出现和消失来处理的。
到这里,如果没有引入即时通讯,就结束了。
再来说一说即时通讯被踢的解决办法
通过监听即时通讯被踢的通知,实现方法,原本就在APP delegate中有这个方法,因为需要跳到登录页。
解决办法:移除视频播放器所在的window,并让页面所在window成为主window,显示出来
上面红框中的很重要,否则登录页会出现半横屏的状况。
这样视频的window是不见了,但是,你会发现又有一个问题,他还有声音,好坑爹啊。
那么,直接上解决办法:
监听被踢事件,重载webview,就解决了。代码上图已有。至于原因,。。。呵呵哒
如果有新的理解,欢迎来讨论。本人邮箱:253190024@qq.com
网上给出的解决办法:
在 APPDelegate.h 文件中增加属性:是否支持横屏
/*** 是否允许横屏的标记 */ @property (nonatomic,assign)BOOL allowRotation;
在 APPDelegate.m 文件中增加方法,控制全部不支持横屏
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { if (self.allowRotation) { return UIInterfaceOrientationMaskAllButUpsideDown; } return UIInterfaceOrientationMaskPortrait; }
这样在其他界面想要横屏的时候,我们只要控制 allowRotation 这个属性就可以控制其他界面进行横屏了。
//需在上面#import "AppDelegate.h" AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.allowRotation = YES; //不让横屏的时候 appDelegate.allowRotation = NO;即可
播放界面横屏
所以这里可以使用 UIWindow 的通知,就可以解决[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(begainFullScreen) name:UIWindowDidBecomeVisibleNotification object:nil];//进入全屏 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endFullScreen) name:UIWindowDidBecomeHiddenNotification object:nil];//退出全屏
在退出全屏时,增加逻辑让其强制编程竖屏,这样当全屏播放的时候,点击 down("完成") 时,就会自动变成竖屏了。
// 进入全屏 -(void)begainFullScreen { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.allowRotation = YES; } // 退出全屏 -(void)endFullScreen { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.allowRotation = NO; //强制归正: 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]; } }
但是依旧会出现很多问题,而且网上一大堆全是如是不变的解决办法,对于这些复制粘贴,真是浪费时间,浪费感情。
按照上面的方法,确实会解决当前的问题,但是会引发更多的问题,而且有些问题很难解决。
第一,横屏退出播放后,状态栏不见了,整个APP的状态栏不见了
第二,如果项目中引入即时通讯,账号被踢,视频依旧处于播放状态,还可以继续播放,这显然是不合理的。而且还退出不了。至少我没有找到这方面的解决办法,当然可能原生控制的话比较方便吧,但是我们项目中这个模块是由html实现的,没办法时间比较急。
第三,我可能找到了更好的方法
它是由两块window来实现的,视频播放器是用一个新的window来实现的。这样的话,便有了一个新的思路,根据判断window,来解决横竖屏的问题
在APP delegate中:
但是这么写,也有一些问题,横屏退出播放后,状态栏不见了,但是其他页面没有问题
解决方法:在对应页面添加退出window的通知,其实最上面的解决办法也是基于监听新window出现和消失来处理的。
到这里,如果没有引入即时通讯,就结束了。
再来说一说即时通讯被踢的解决办法
通过监听即时通讯被踢的通知,实现方法,原本就在APP delegate中有这个方法,因为需要跳到登录页。
解决办法:移除视频播放器所在的window,并让页面所在window成为主window,显示出来
上面红框中的很重要,否则登录页会出现半横屏的状况。
这样视频的window是不见了,但是,你会发现又有一个问题,他还有声音,好坑爹啊。
那么,直接上解决办法:
监听被踢事件,重载webview,就解决了。代码上图已有。至于原因,。。。呵呵哒
如果有新的理解,欢迎来讨论。本人邮箱:253190024@qq.com
相关文章推荐
- iOS 全局禁止横屏,但视频播放界面选择性横屏的解决办法
- iOS全局禁止横屏,但视频播放界面选择性横屏的解决办法
- iOS 全局禁止横屏,但视频播放界面选择性横屏的解决办法
- iOS 全局禁止横屏,个别界面选择性横屏的解决办法
- iOS 全局禁止横屏,但UIWebView 全屏横屏播放视频的解决办法
- iOS 全局禁止横屏,但UIWebView 全屏播放视频,横屏,解决办法
- iOS 全局禁止横屏,但UIWebView 全屏播放视频,横屏,解决办法(任意页面横竖屏或禁止)
- iOS 全局禁止横屏,但UIWebView 全屏播放视频,横屏,解决办法
- Android之通过VideoView控件播放一个视频出现的问题以及我的解决办法
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边以及禁止游戏中自动锁屏问题!【2011年12月18日补充】
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边以及禁止游戏中自动锁屏问题!【2011年12月18日补充】
- iOS UIWebView 全屏播放视频, 需横屏,单app不支持横屏, 解决办法
- 实现iOS全局禁止横屏,但kxmovie全屏横屏播放视频
- 关于goole解决视频播放界面花掉解决办法
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边以及禁止游戏中自动锁屏问题!【2011年12月18日补充】
- mediaPlayer的一些坑爹问题 以及解决surfview播放视频时候有黑屏闪现的问题
- Android 使用Webview无法播放视频问题的解决办法
- Android Webview完美支持播放各种视频。(解决无法播放优酷视频的问题以及周末无法播放优酷视频的问题)
- 关于iphone自动播放音频和视频问题的解决办法
- iOS UIWebView 全屏播放视频, 需横屏,单app不支持横屏, 解决办法