2016-10-05 2 views
6

zu erfassen Ich habe ein AVPlayerViewController programmgesteuert zu einem UIViewController hinzugefügt. Ich kann die Benachrichtigung erhalten, wenn der Player fertig ist (playerDidFinishPlaying). Ich würde auch gerne wissen, ob ein Benutzer den Bildschirm berührt hat, während das Video abgespielt wird, und ich habe keine zugehörigen Benachrichtigungen gefunden.In Swift, wie Touch während der Wiedergabe von Video in AVPlayerViewController

+0

Wie wird die Berührung erkannt, wenn der Benutzer die Vorwärts-/Rückwärts-Taste drückt? – pkc456

Antwort

6

Die Lösung ist eine Basis Klasse von AVPlayerViewController zu erstellen und zu überschreiben touches​Began(_:​with:​) Methode:

Swift 2:

Individuelle Basisklasse:

class CustomAVPlayerViewController: AVPlayerViewController { 
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     print("touchesBegan") 
    } 
} 

Viewcontroller:

let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") 
let player = AVPlayer(URL: videoURL!) 
let playerViewController = CustomAVPlayerViewController() 
playerViewController.player = player 
self.presentViewController(playerViewController, animated: true) { 
    playerViewController.player!.play() 
} 

Swift 3:

Individuelle Basisklasse:

class CustomAVPlayerViewController: AVPlayerViewController { 
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     print("touchesBegan") 
    } 
} 

-View-Controller:

let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") 
let player = AVPlayer(url: videoURL!) 
let playerViewController = CustomAVPlayerViewController() 
playerViewController.player = player 
self.present(playerViewController, animated: true) { 
    playerViewController.player!.play() 
} 

Vergessen Sie nicht zu import AVKit und import AVFoundation.

Jedes Mal, wenn Sie auf playerViewController tippen, wird "touchesBegan" gedruckt.

+2

Irgendwelche Gedanken über die Referenzdokumentation: _Unterlassen Sie keine AVPlayerViewController. Das Überschreiben der Methoden dieser Klasse wird nicht unterstützt und führt zu undefiniertem Verhalten_. – Bruce

+1

In Bezug auf den @ Bruce-Kommentar ([Apple-Dokumentation] (https://developer.apple.com/reference/avkit/avplayerviewcontroller)): _touchesBegan_ ist ein [UIResponder] (https://developer.apple.com/reference/uikit/uiresponder) Methode (UIResponder-> UIViewController-> AVPlayerViewController). In unserem Fall sollte UIResponder sich um Berührungsereignisse kümmern, es bezieht sich nicht auf die Kernfunktionalität des AVPlayerViewControllers, dh das Überschreiben dieser Methode spiegelt nicht wider, wie AVPlayerViewController mit der Arbeit mit einem Video umgeht - Methoden, die dies nicht tun sollten außer Kraft gesetzt. danke für die Notiz. –

+0

@AhmadF, Wie kann man eine Berührung erkennen, wenn der Benutzer die Vorwärts/Rückwärts-Taste drückt? – pkc456

Verwandte Themen