AVPlayerViewController是UIViewController的子类。因此,不要使用常规的视图控制器,而是按照以下步骤创建自定义电影播放器控制器:
不要将AVPlayerViewController子类化。不支持覆盖此类的方法,并导致未定义的行为。
尝试这样:
import UIKitimport AVKitimport AVFoundationclass MoviePlayerViewController: AVPlayerViewController { override func viewDidLoad() { super.viewDidLoad() player = AVPlayer(URL: url) videoGravity = AVLayerVideoGravityResizeAspect showsPlaybackControls = true // player?.play() // uncomment this line to autoplay NSNotificationCenter.defaultCenter().addObserver(self, selector: "didPlayToEndTime", name: AVPlayerItemDidPlayToEndTimeNotification, object: nil) } func didPlayToEndTime(){ print("didPlayToEndTime") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}要将其用作背景,可以执行以下操作:
import UIKitimport AVKitimport AVFoundationclass ViewController: UIViewController { let moviePlayerController = AVPlayerViewController() var aPlayer = AVPlayer() func playBackgroundMovie(){ if let url = NSBundle.mainBundle().URLForResource("video", withExtension: "mov") { aPlayer = AVPlayer(URL: url) } moviePlayerController.player = aPlayer moviePlayerController.view.frame = view.frame moviePlayerController.view.sizeToFit() moviePlayerController.videoGravity = AVLayerVideoGravityResizeAspect moviePlayerController.showsPlaybackControls = false aPlayer.play() view.insertSubview(moviePlayerController.view, atIndex: 0) } func didPlayToEndTime(){ aPlayer.seekToTime(CMTimeMakeWithSeconds(0, 1)) aPlayer.play() } override func viewDidLoad() { super.viewDidLoad() playBackgroundMovie() NSNotificationCenter.defaultCenter().addObserver(self, selector: "didPlayToEndTime", name: AVPlayerItemDidPlayToEndTimeNotification, object: nil) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}


