8

Ich implementiere einen iOS-Videoplayer mit AVPlayerViewController mit benutzerdefinierten Wiedergabesteuerelementen (d. H. Die showsPlaybackControls-Eigenschaft ist als NO definiert). Dies scheint in den meisten Fällen richtig zu funktionieren. Das einzige Problem, das ich sehe, ist, dass ich einen benutzerdefinierten Aktivitätsindikator mit dem Player verwenden möchte, aber es scheint, dass AVPlayerViewController einen Standardaktivitätsindikator beim Puffern des Videos an einigen Punkten zeigt .Pufferaktivitätsanzeige von AVPlayerViewController entfernen

Gibt es eine Möglichkeit, diese Standard-Aktivitätsanzeige von AVPlayerViewController zu entfernen?

Das Bild zeigt, was ich beschreibe, die Steuerelemente unten sind benutzerdefinierte und überlagert auf dem Player, aber die Aktivitätsanzeige ist nicht.

player with custom controls and default activity indicator

+4

Ich hoffe jemand kann helfen, ich Ich versuche das Gleiche zu tun! – Pangu

Antwort

2

Ich machte eine Erweiterung von AVPlayerViewController, die den internen Aktivitätsindikator verfügbar macht. Hier gehen Sie mit der ganzen Swift 3 Sexiness:

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 
     } 
    } 
} 

Mit diesem können Sie entweder einfach die UIActivityIndicatorView Stil oder einfach nur verstecken sie alle zusammen, zum Beispiel:

playerViewController.isActivityIndicatorHidden = true 
+0

Fehler erhalten: "Der Ausdruck war zu komplex, um in angemessener Zeit gelöst zu werden; in Betracht ziehen, den Ausdruck in verschiedene Unterausdrücke aufzuteilen" – Rinku

+0

Sehr einfach zu lösen, einfach in mehrere Ausdrücke aufteilen. Machen Sie also nicht jede "flatMap" in derselben Zeile, erstellen Sie intermittierende Variablen. –

1

Ich suchte auch für diese Lösung und die Art, wie ich es verstecken Video-Player View-Controller sehen machen es geschafft, ist, wenn ich Video zu spielen begann und als Video bereit ist, ich es zu spielen zeigen wieder.

Verwandte Themen