我将n个AVPlayer放置在视图控制器中,以定制视图控制器的其他元素,但我仍希望在不使用AVPlayerViewController时使用播放和刮擦控件。是否有一种方法可以为AVPlayer启用这些控件?
我将n个AVPlayer放置在视图控制器中,以定制视图控制器的其他元素,但我仍希望在不使用AVPlayerViewController时使用播放和刮擦控件。是否有一种方法可以为AVPlayer启用这些控件?
不行。通常的解决方案(由苹果明确建议)是将AVPlayerViewController作为嵌入式视图控制器 - 即,使您的视图控制器成为自定义父视图控制器,而AVPlayerViewController则成为其子视图控制器,现在您可以将其视图(电影和控件)放置在您的视图中作为子视图以良好顺序。示例(self
是您的视图控制器):
let url = // whatever
let player = AVPlayer(URL:url)
let avPlayerViewController = AVPlayerViewController()
avPlayerViewController.player = player
avPlayerViewController.view.frame = // whatever
self.addChild(avPlayerViewController)
self.view.addSubview(avPlayerViewController.view)
avPlayerViewController.didMove(toParent: self)
要使用Swift 5更新此帖子,您可以尝试以下代码:
let videoURL = URL(string: "https://your_video_in_internet.mp4")
let player = AVPlayer(url: videoUrl)
let playerViewController: AVPlayerViewController!
playerViewController = AVPlayerViewController()
playerViewController.view.frame = YOUR_FRAME_OR_EMBED_IN_STORYBOARD
playerViewController.player = player
playerViewController.showsPlaybackControls = true
playerViewController.videoGravity = .resizeAspectFill
YOUR_FRAME_OR_EMBED_IN_STORYBOARD.addSubview(playerViewController.view)
playerViewController.player!.play()
addChild(playerViewController)
来使其工作。 - undefinedlet player = AVPlayer(url: url)
let playerViewController = AVPlayerViewController()
playerViewController.view.frame = self.videoPlayerView.bounds
playerViewController.player = player
self.addChild(playerViewController)
self.videoPlayerView.addSubview(playerViewController.view)
playerViewController.didMove(toParent: self)