从AVPlayerViewController中删除缓冲活动指示器

gut*_*rgn 9 iphone uiactivityindicatorview ios avplayer avplayerviewcontroller

我正在使用AVPlayerViewController自定义播放控件实现iOS视频播放器(即showsPlaybackControls属性定义为NO).这似乎在大多数情况下都能正常工作,我看到的唯一问题是我想在播放器中使用自定义活动指示器,但似乎AVPlayerViewController在某些时候缓冲视频时显示默认活动指示器.

有没有办法从中删除此默认活动指示器视图AVPlayerViewController

图像显示我正在描述的内容,底部的控件是自定义的并覆盖在播放器顶部,但活动指示器不是.

具有自定义控件和默认活动指示器的玩家

Gas*_*enc 4

我做了一个扩展,AVPlayerViewController公开了内部活动指示器。在这里,您将看到 Swift 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,您可以轻松地设计样式UIActivityIndicatorView或将其全部隐藏在一起,例如:

playerViewController.isActivityIndicatorHidden = true
Run Code Online (Sandbox Code Playgroud)