Удалить индикатор активности буферизации из AVPlayerViewController
Я реализую видеоплеер iOS, используя AVPlayerViewController
с пользовательскими элементами управления воспроизведением (т. е. свойство showsPlaybackControls
определено как NO
). Это, кажется, работает правильно в большинстве случаев, единственная проблема, которую я вижу, заключается в том, что я хотел бы использовать пользовательский индикатор активности с плеером, но кажется, что AVPlayerViewController
показывает индикатор активности по умолчанию при буферизации видео в некоторых точках.
Есть ли способ удалить это представление индикатора активности по умолчанию из AVPlayerViewController
?
Изображение показывает то, что я описываю, элементы управления внизу являются пользовательскими и накладываются сверху на игрока, но индикатор активности-нет.
2 ответа:
Я сделал расширение
AVPlayerViewController
, которое показывает индикатор внутренней активности. Вот так, со всей стремительностью 3 сексуальности:import AVKit extension AVPlayerViewController { /// Activity indicator contained nested inside the controller's view. var activityIndicator: UIActivityIndicatorView? { // Indicator is extracted by traversing the subviews of the controller's `view` property. // `AVPlayerViewController`'s view contains a private `AVLoadingIndicatorView` that // holds an instance of `UIActivityIndicatorView` as a subview. let nestedSubviews: [UIView] = view.subviews .flatMap { [$0] + $0.subviews } .flatMap { [$0] + $0.subviews } .flatMap { [$0] + $0.subviews } return nestedSubviews.filter { $0 is UIActivityIndicatorView }.first as? UIActivityIndicatorView } /// Indicating whether the built-in activity indicator is hidden or not. var isActivityIndicatorHidden: Bool { set { activityIndicator?.alpha = newValue ? 0 : 1 } get { return activityIndicator?.alpha == 0 } } }
С помощью этого вы можете либо легко стилизовать
UIActivityIndicatorView
, либо просто скрыть все вместе, например:playerViewController.isActivityIndicatorHidden = true
Я также искал это решение и способ, которым мне удалось это сделать, это скрыть видео-плеер view controllers view, как только я начал воспроизводить видео, и когда видео готово к воспроизведению, я показываю его снова.
private func playVideo() { videoPlayer?.play() self.addLoader() videoPlayerController.view.hidden = true videoPlayer?.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.New, context: nil) } public override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { if (object?.isEqual(videoPlayer) == true && keyPath == "status") { self.removeLoader() videoPlayerController.view.hidden = false } }