2017-06-02 1 views
0

Ich versuche ein Overlay zu erstellen, das über einem AVPlayer angezeigt wird, wenn ich pause drücke. Das Problem, das ich habe, ist, dass, während ich Tasten gut überlagern kann ich nicht die Fokus-Engine in TVOS bekommen kann, um auf sie zu konzentrieren ... Ich bin ziemlich sicher, dass dies geschieht, da der Spieler Rahmen rauh Fokus (es ist Fullscreen @ 1080p) und ich kann mich nicht auf Objekte konzentrieren, die sich innerhalb des Frames befinden.Hinzufügen von Overlay-Schaltflächen zu tvOS AVPlayerViewController

Pseudo-Code für das, was ich tue:

class MyViewController: UIViewController { 
    var playerController = AVPlayerViewController() 
    @IBOutlet weak var button: UIButton! // button centred on screen that requires focus 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.playerController.player = AVPlayer(url: myURL) 
     self.playerController.view.frame = self.view.bounds 
     self.view.addSubview(self.playerController.view) 
     self.view.bringSubview(toFront: self.button) 
    } 

    // ... functions that enable listeners and show/hide button when self.playerController.player rate changes 
} 

Was ich will, Pause drücken können, dann nach oben wischen Fokus auf der Taste (n) anstelle der Suchleiste zu bekommen und dann Wischen Sie bei Bedarf zurück zur Suchleiste. Ähnlich wie die Apple Music-Anwendung, die mit dem tvOS geliefert wird.

Danke.

Antwort

0

Meine Lösung besteht darin, preferredFocusEnvironment zu überschreiben und einige Listener dem übergeordneten VC hinzuzufügen, um eine Bedingung zu ändern, wenn bestimmte Aktionen ausgeführt werden ... nicht perfekt, aber gut genug.

override var preferredFocusEnvironment { 
    if self.someCondition { 
     return [self.button] 
    } 
    else { 
     return [self.playerController.view] 
    } 
} 
Verwandte Themen