# iOSPlayerVerticalAndHorizontalScreenDemo
这是一个iOS中播放器横竖屏切换的demo。
所有的视频类App都会面临一个播放器横竖屏切换的问题,之前一直使用KVO强制修改设备方向达到竖屏转为横屏。
```
UIDevice.current.setValue(value, forKey: "orientation")
```
目前看来,优酷视频貌似依然使用的这个方法,具体表现为statusBar会跟着屏幕做旋转动画,而且播放器下的其他控件会转到横屏布局。
但是这个方法是非官方提供的API,随着系统版本的更迭有可能会失效。
所以许多公司采用了modal出一个只支持横屏的控制器来达到横竖屏切换的目的。
## 思路
有以下两种方法实现。
### 方法1
竖屏转横屏时:由竖屏控制器做一个播放器由小变大,并且旋转为横屏的动画,动画结束时做一个无动画的present
横屏转竖屏时:做一个无动画的dimiss,dimiss完成后,依然由竖屏控制器做播放器由大变小并且旋转回原处的动画。
目前看来,爱奇艺和bilibili貌似使用这个方式,具体表现为竖屏切横屏时,播放器动画完成后,statusBar无动画转为横屏;横屏切竖屏时,statusBar先无动画转为竖屏,然后才开始播放器动画。
#### 这种方法的坑
#### 问题
但是目前这个方法有一个问题,就是在横屏转竖屏时,画面偶尔会闪一下。
#### 问题分析
画面偶尔会闪一下,是在默认的模式下,控制器的.modalPresentationStyle = UIModalPresentationStyle.fullScreen,此时,当控制器A present 出控制器B,完成present动作后,控制器B的view会添加进一个UITransitionView类型的View中(即我们在自定义转场动画时的transitionContext.containerView),UITransitionView是直接添加在Window上的,而控制器A的view会暂时从视图层级中移除。当无动画dimiss时,UITransitionView先从Window移除,然后控制器A的View在添加到window上,在这中间有可能会造成闪动。
所以只要保证完成present动作后,控制器A的view依然保持在视图层级中即可。
#### 解决方案
##### 解决方案1
在UIModalPresentationStyle中有一个枚举类型:.overFullScreen,这个方式的作用就是保证完成present动作后,控制器A的view依然保持在视图层级中。
所以我们设置控制器B的.modalPresentationStyle = .overFullScreen,测试证明这个属性可以保证完成present动作后,控制器A的view依然保持在视图层级中,但是重力感应的方向不会发生改变。所以这个方案不可用。
##### 解决方案2
既然系统没有可以使用的,那我们可以在presen完成后,自己手动把控制器A 的View插入到控制器BView的下边。有两种方式,
方式一:
将控制器A的view直接插入到UITransitionView内的控制器B的View下
```
// 方式一:将当前控制器的view插入到 横屏view的下方
controller.view.superview?.insertSubview(strongSelf.view, belowSubview: controller.view)
```
方式二:
将window的rootViewController的View插入到Window之上,UITransitionView之下,这种方式的效果和.overFullScreen的效果一样。
这两种方式都可以,可以根据实际情况来选择使用
```
// 方式二:.overFullScreen的实际效果
if let keyWindow = UIApplication.shared.keyWindow,let rootViewController = UIApplication.shared.keyWindow?.rootViewController, let containerView = controller.view.superview {
keyWindow.insertSubview(rootViewController.view, belowSubview: containerView)
}
```
### 方法2
自定义转场动画!
目前看来,腾讯视频有可能使用这个方式。
但是这个方式也有一个问题,就是自动转场动画后,从横屏返回竖屏,本该竖屏的控制器不能变回竖屏,这应该是苹果的一个bug,目前我的解决方式是在将要展现的生命周期方法中强行设置为正确的fram
```
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("Tabbar - WillAppear",view.frame)
// 因为 presented 完成后,控制器的view的frame会错乱,需要每次将要展现的时候强制设置一下
view.frame = UIScreen.main.bounds
}
```
## 效果图
![](Resource/Demonstration.gif)
没有合适的资源?快使用搜索试试~ 我知道了~
这是一个iOS中播放器全屏方案的demo..zip
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共31个文件
swift:16个
json:5个
png:2个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
需积分: 3 0 下载量 158 浏览量
2024-01-15
10:14:32
上传
评论
收藏 5.16MB ZIP 举报
温馨提示
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/GIF.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 31 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/2b17cb8b32224168bb8ed166a94dd8f6_weixin_56154577.jpg!1)
JJJ69
- 粉丝: 6262
- 资源: 5775
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)