Я пытаюсь обернуть AVPlayer
в свой собственный класс, чтобы я мог предоставить более приятный API для использования во всем моем приложении, и чтобы я мог имитировать поведение игрока для тестирования с другими объектами (и потому что AVPlayer
KVO довольно некрасиво использовать!). Вот упрощенная модель того, что я пытаюсь сделать, используя только функции воспроизведения и паузы:
protocol VideoPlayerProtocol {
func play()
func pause()
}
class AVPlayerWrapped: VideoPlayerProtocol {
private let player = AVPlayer()
init(playerItem: AVPlayerItem) {
self.player.replaceCurrentItem(with: playerItem)
}
func play() {
player.play()
}
func pause() {
player.pause()
}
}
У меня также есть PlayerView
, который добавляет AVPlayerLayer
в представление. Из документов Apple это устанавливается путем предоставления представления AVPlayer
:
class PlayerView: UIView {
override class var layerClass: AnyClass {
return AVPlayerLayer.self
}
var playerLayer: AVPlayerLayer {
return layer as! AVPlayerLayer
}
var player: AVPlayer? {
get { playerLayer.player }
set { playerLayer.player = newValue }
}
}
Проблема в том, что когда я настраиваю объект AVPlayerWrapped
, для отображения воспроизведения в нужном мне виде чтобы раскрыть базовый AVPlayer
свойству player
на PlayerView
, что лишает меня смысла оборачивать игрока.
Есть ли способ каким-то образом использовать AVPlayerLayer
без моего AVPlayerWrapped
пожалуйста, раскрыть основного игрока? Или я придерживаюсь неправильного подхода?
Любое руководство очень ценно!