2016-09-01 22 views
9

Chcę mieć możliwość odwołania się do instancji AVPlayer, która przejmuje ekran podczas odtwarzania filmów HTML na pełnym ekranie z wbudowanych przeglądarek. Moje pierwsze podejście było następujące:Swift: Jak uzyskać dostęp do obiektu odtwarzacza pełnoekranowego wideo HTML?

extension AVPlayerViewController { 

    override public func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     print("herezzzzzzzzzzzzzzzzzzzzzzzzzzz") // prints correctly 
     print(self.player) // prints nil 
    } 
} 

Jednak zawsze zwraca zero. Próbuję więc innego podejścia. Chcę zastąpić metodę inicjatora lub play AVPlayer, ale nie mogę tego zrobić bez uzyskania konfliktów selektora-c.

import AVKit 
import MediaPlayer 

extension AVPlayer { 
    override func play() { // this doesn't work. just an example of what i want 
    super.play() 

    print("do stuff here") 
    } 
} 

Czy istnieje sposób, aby zastąpić jedną z metod instancji AVPlayer, tak można przechowywać odniesienie do self? Czy to nawet nie jest AVPlayer?

+0

Czy to nie pomogło? http://stackoverflow.com/questions/25932570/how-to-play-video-with-avplayerviewcontroller-avkit-in-swift – Santosh

+0

Chcę odwołać się do domyślnego odtwarzacza, który otwiera się podczas odtwarzania filmów w wbudowanej przeglądarce, nie ręcznie odtwarzaj filmy za pomocą adresu URL – Edmund

Odpowiedz

1

Nie można zastąpić metod z rozszerzenia. A dokładniej, kompilator pozwala to zrobić, ale to nie działa. Zobacz ten wątek: Overriding methods in Swift extensions

Nie należy również podklasy AVPlayerViewController.

Dlaczego nie możesz po prostu przeczytać właściwości AVPlayerViewController s player w klasie, która ją tworzy?

+0

Próbuję zrobić to dla wszystkich filmów, które są odtwarzane na pełnym ekranie z mojej wbudowanej przeglądarki, więc chcę uzyskać globalny sposób przechwytywania "odtwarzacza", który przejmuje ekran – Edmund

+0

Myślę, że jesteś poza szczęście wtedy. –

Powiązane problemy