前言
很早之前開源了一個簡單的視頻播放器氏捞,由于年久失修流强,效果慘目忍睹,最近特意花時間對其進行了深度重構争占。舊版本后期不再維護砰盐,新版本使用Swift
實現(xiàn)闷袒,后續(xù)會增加更多功能。不想看文字的請自行下載代碼------>>>CLPlayer
舊版本 VS 重構版本
1.新版本使用Swift
岩梳,舊版本使用Objective-C
2.新版本采用自定義轉場實現(xiàn)全屏囊骤,舊版本使用旋轉屏幕
3.新版本不需要手動銷毀播放器
4.新版本修復了老版本遺留bug
5.新版本降低了代碼耦合性
6.新版本增加了倍數(shù)播放,切換填充模式
7.新版本提供更豐富的API
8.新版本適配了iPhone X
9.新版本移除了狀態(tài)欄相關配置
效果
效果圖
全屏
控制面板
UITableView
4.png
功能
- 支持全屏模式冀值、小屏模式
- 支持跟隨手機自動旋轉
- 支持本地視頻也物、網絡
URL
- 支持
UITableView
- 支持
UICollectionView
- 支持手勢改變屏幕的亮度(屏幕左半邊)
- 支持手勢改變音量大小(屏幕右半邊)
- 支持拖動
UISlider
快進快退 - 支持
iPhone X
留海屏 - 支持倍速播放(
0.5X列疗、1.0X滑蚯、1.25X、1.5X抵栈、1.75X告材、2X
) - 支持動態(tài)改變播放器的填充模式(
適應、拉伸古劲、填充
) - 支持
cocoapods
接入指南
項目必須支持全屏斥赋,建議將屏幕支持方向交由當前顯示的控制器自行管理。
項目支持全屏方案
1.先勾選支持方向产艾,只保留portrait
疤剑,保證APP啟動不會橫屏
image.png
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必須是通過模態(tài)出來的UIViewController(模態(tài)帶導航的無效)方式展現(xiàn)出來的滑绒,才會調用這個方法)
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必須是通過模態(tài)出來的UIViewController(模態(tài)帶導航的無效)方式展現(xiàn)出來的,才會調用這個方法)
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return topViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
}
UIViewController
// 是否支持自動轉屏
override var shouldAutorotate: Bool {
return false
}
// 支持哪些屏幕方向
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
// 默認的屏幕方向(當前ViewController必須是通過模態(tài)出來的UIViewController(模態(tài)帶導航的無效)方式展現(xiàn)出來的骚露,才會調用這個方法)
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
第一版,后續(xù)會持續(xù)更新棘幸,定制化開發(fā)請自行參考CLPlayer修改 , 如果喜歡误续,歡迎star。