从 AVPlayerViewController 中删除 QuickTime 图标
Removing the QuickTime icon from AVPlayerViewController
我正在构建一个屏幕,用户可以在其中使用 AVPlayerViewController 播放音频文件。问题是我无法去掉播放器视图中的 QuickTime 标志,请看截图:
我的代码:
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
guard let url = URL(string: filePath!) else {
return
}
let player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.modalPresentationStyle = .overFullScreen
controller.player = player
self.present(controller, animated: true) {
player.play()
}
} catch {
}
我尝试使用 controller.contentOverlayView?.addSubView()
添加 UIImageView,但我无法将其正确居中。如何自定义播放器的布局而无需从头开始构建自己的界面?
您的尝试是正确的:只需将子视图添加到内容覆盖视图即可。但是你漏掉了一步:你必须给子视图和内容叠加视图约束,让它们完全覆盖播放器控制器的视图。
示例(我的 av
是你的 controller
):
let iv = UIView()
iv.backgroundColor = .white
av.contentOverlayView!.addSubview(iv)
let v = av.contentOverlayView!
iv.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
iv.bottomAnchor.constraint(equalTo:v.bottomAnchor),
iv.topAnchor.constraint(equalTo:v.topAnchor),
iv.leadingAnchor.constraint(equalTo:v.leadingAnchor),
iv.trailingAnchor.constraint(equalTo:v.trailingAnchor),
])
NSLayoutConstraint.activate([
v.bottomAnchor.constraint(equalTo:av.view.bottomAnchor),
v.topAnchor.constraint(equalTo:av.view.topAnchor),
v.leadingAnchor.constraint(equalTo:av.view.leadingAnchor),
v.trailingAnchor.constraint(equalTo:av.view.trailingAnchor),
])
如果你只想去掉“Q”标志而不用任何东西替换它,你可以这样去掉:
(avPlayerViewController?.view.subviews.first?.subviews.first as? UIImageView)?.image = nil
但是,至少对我而言,“Q”徽标通常只在我设置播放器视图控制器后约 2 秒出现。所以你可能需要使用一个计时器来让上面的代码在创建播放器后大约 2 秒运行。
我正在构建一个屏幕,用户可以在其中使用 AVPlayerViewController 播放音频文件。问题是我无法去掉播放器视图中的 QuickTime 标志,请看截图:
我的代码:
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
guard let url = URL(string: filePath!) else {
return
}
let player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.modalPresentationStyle = .overFullScreen
controller.player = player
self.present(controller, animated: true) {
player.play()
}
} catch {
}
我尝试使用 controller.contentOverlayView?.addSubView()
添加 UIImageView,但我无法将其正确居中。如何自定义播放器的布局而无需从头开始构建自己的界面?
您的尝试是正确的:只需将子视图添加到内容覆盖视图即可。但是你漏掉了一步:你必须给子视图和内容叠加视图约束,让它们完全覆盖播放器控制器的视图。
示例(我的 av
是你的 controller
):
let iv = UIView()
iv.backgroundColor = .white
av.contentOverlayView!.addSubview(iv)
let v = av.contentOverlayView!
iv.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
iv.bottomAnchor.constraint(equalTo:v.bottomAnchor),
iv.topAnchor.constraint(equalTo:v.topAnchor),
iv.leadingAnchor.constraint(equalTo:v.leadingAnchor),
iv.trailingAnchor.constraint(equalTo:v.trailingAnchor),
])
NSLayoutConstraint.activate([
v.bottomAnchor.constraint(equalTo:av.view.bottomAnchor),
v.topAnchor.constraint(equalTo:av.view.topAnchor),
v.leadingAnchor.constraint(equalTo:av.view.leadingAnchor),
v.trailingAnchor.constraint(equalTo:av.view.trailingAnchor),
])
如果你只想去掉“Q”标志而不用任何东西替换它,你可以这样去掉:
(avPlayerViewController?.view.subviews.first?.subviews.first as? UIImageView)?.image = nil
但是,至少对我而言,“Q”徽标通常只在我设置播放器视图控制器后约 2 秒出现。所以你可能需要使用一个计时器来让上面的代码在创建播放器后大约 2 秒运行。