前语
很早之前开源了一个简略的视频播映器,因为年久失修,作用惨目忍睹,最近特意花时刻对其进行了深度重构。旧版别后期不再维护,新版别运用Swift
完结,后续会添加更多功能。不想看文字的请自行下载代码——>>>CLPlayer
旧版别 VS 重构版别
1.新版别运用Swift
,旧版别运用Objective-C
2.新版别采用自定义转场完结全屏,旧版别运用旋转屏幕
3.新版别不需要手动毁掉播映器
4.新版别修正了老版别留传bug
5.新版别降低了代码耦合性
6.新版别添加了倍数播映,切换填充形式
7.新版别供给更丰富的API
8.新版别适配了iPhone X
9.新版别移除了状态栏相关装备
作用
功能
- 支撑全屏形式、小屏形式
- 支撑跟随手机主动旋转
-
支撑本地视频、网络
URL
-
支撑
UITableView
-
支撑
UICollectionView
- 支撑手势改动屏幕的亮度(屏幕左半边)
- 支撑手势改动音量大小(屏幕右半边)
-
支撑拖动
UISlider
快进快退 -
支撑
iPhone X
留海屏 -
支撑倍速播映(
0.5X、1.0X、1.25X、1.5X、1.75X、2X
) -
支撑动态改动播映器的填充形式(
习惯、拉伸、填充
) -
支撑
cocoapods
接入攻略
项目有必要支撑全屏,建议将屏幕支撑方向交由当时显示的操控器自行管理。
项目支撑全屏方案
1.先勾选支撑方向,只保留portrait
,确保APP启动不会横屏
2.AppDelegate
中重写func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {}
办法
func application(_: UIApplication, supportedInterfaceOrientationsFor _: UIWindow?) -> UIInterfaceOrientationMask {
return .allButUpsideDown
}
3.在父类中重写屏幕操控相关办法
UITabBarController
// 是否支撑主动转屏
override var shouldAutorotate: Bool {
guard let navigationController = selectedViewController as? UINavigationController else { return selectedViewController?.shouldAutorotate ?? false }
return navigationController.topViewController?.shouldAutorotate ?? false
}
// 支撑哪些屏幕方向
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
guard let navigationController = selectedViewController as? UINavigationController else { return selectedViewController?.supportedInterfaceOrientations ?? .portrait }
return navigationController.topViewController?.supportedInterfaceOrientations ?? .portrait
}
// 默许的屏幕方向(当时ViewController有必要是经过模态出来的UIViewController(模态带导航的无效)办法展现出来的,才会调用这个办法)
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
guard let navigationController = selectedViewController as? UINavigationController else { return selectedViewController?.preferredInterfaceOrientationForPresentation ?? .portrait }
return navigationController.topViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
}
UINavigationController
// 是否支撑主动转屏
override var shouldAutorotate: Bool {
return topViewController?.shouldAutorotate ?? false
}
// 支撑哪些屏幕方向
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return topViewController?.supportedInterfaceOrientations ?? .portrait
}
// 默许的屏幕方向(当时ViewController有必要是经过模态出来的UIViewController(模态带导航的无效)办法展现出来的,才会调用这个办法)
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return topViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
}
UIViewController
// 是否支撑主动转屏
override var shouldAutorotate: Bool {
return false
}
// 支撑哪些屏幕方向
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
// 默许的屏幕方向(当时ViewController有必要是经过模态出来的UIViewController(模态带导航的无效)办法展现出来的,才会调用这个办法)
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return .portrait
}
4.部分页面需要支撑多方向
在对应操控器中重写以下办法
override var shouldAutorotate: Bool {
return true
}
// 支撑哪些屏幕方向
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .allButUpsideDown
}
基础装备
public struct CLPlayerConfigure {
/// 顶部工具条躲藏风格
public enum CLPlayerTopBarHiddenStyle {
/// 小屏和全屏都不躲藏
case never
/// 小屏和全屏都躲藏
case always
/// 小屏躲藏,全屏不躲藏
case onlySmall
}
/// 主动旋转
public var isAutoRotate = true
/// 手势操控
public var isGestureInteractionEnabled = true
/// 是否显示更多面板
public var isShowMorePanel = true
/// 顶部工具条躲藏风格
public var topBarHiddenStyle: CLPlayerTopBarHiddenStyle = .onlySmall
/// 工具条主动消失时刻
public var autoFadeOut: TimeInterval = 5
/// 默许拉伸办法
public var videoGravity: AVLayerVideoGravity = .resizeAspectFill
/// 顶部工具条布景色彩
public var topToobarBackgroundColor: UIColor = .black.withAlphaComponent(0.6)
/// 底部工具条布景色彩
public var bottomToolbarBackgroundColor: UIColor = .black.withAlphaComponent(0.6)
/// 进度条布景色彩
public var progressBackgroundColor: UIColor = .white.withAlphaComponent(0.35)
/// 缓冲条缓冲进度色彩
public var progressBufferColor: UIColor = .white.withAlphaComponent(0.5)
/// 进度条播映完结色彩
public var progressFinishedColor: UIColor = .white
/// 转子布景色彩
public var loadingBackgroundColor: UIColor = .white
/// 返回按钮图片
public var backImage: UIImage?
/// 更多按钮图片
public var moreImage: UIImage?
/// 播映按钮图片
public var playImage: UIImage?
/// 暂停按钮图片
public var pauseImage: UIImage?
/// 进度滑块图片
public var sliderImage: UIImage?
/// 最大化按钮图片
public var maxImage: UIImage?
/// 最小化按钮图片
public var minImage: UIImage?
/// 封面图片
public var maskImage: UIImage?
}
总结
本次重构为Swift
第一版,后续会持续更新,定制化开发请自行参考CLPlayer修正 , 假如喜爱,欢迎star。
参考资料
-
iOS播映器全屏方案
-
iOS状态栏
-
iOS播映器全屏旋转完结
-
iOS反正屏旋转解决方案 – Swift
-
iOS视频旋转探求
-
iOS屏幕旋转的解决方案