我正在构建一个视频播放器。我在我用于AVPlayerLayer的UIView上添加了一个controlsContainer UIView(包含自定义播放控件)。如何使这个controlsContainer视图在出现几秒后始终隐藏,并且仅在YouTube iOS App的视频播放器中轻敲AVPlayerLayer的某个区域时重新出现?
答案 0 :(得分:0)
向AVplayerLayer添加触摸事件,当用户触摸播放器时,取消隐藏5秒钟,5秒后隐藏它。如果您需要,可以添加隐藏和取消隐藏的动画。
或 如果您直接使用avplayerviewcontroller,您可以简单地说 showPlayBackControls = TRUE;
答案 1 :(得分:0)
假设您的容器视图位于视频图层的顶部,请在视图中添加一个点击手势识别器,并跟踪控件是否显示。当状态更改为变化设置动画时。在这里,我只是将所有子视图设置为淡入/淡出,但您可以轻松地将变换设置为幻灯片输入。当控件出现在屏幕上时,您设置倒计时器并让计时器关闭控件。您还可以保留对此计时器的引用,然后取消它并在每次用户与ui交互时重新安排它,这可能比我在这里更好,但你明白了。
class ViewController: UIViewController {
weak var controlView: UIView!
var isHidingControls = false
override func viewDidLoad() {
super.viewDidLoad()
controlView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapControls)))
}
func tapControls() {
isHidingControls = !isHidingControls
animateControls()
}
func animateControls() {
if isHidingControls {
UIView.animate(withDuration: 0.25, animations: {
self.controlView.subviews.forEach {$0.alpha = 0}
}, completion: { _ in
self.controlView.subviews.forEach {$0.isHidden = true}
})
} else {
self.controlView.subviews.forEach {$0.isHidden = true}
UIView.animate(withDuration: 0.25, animations: {
self.controlView.subviews.forEach {$0.alpha = 1}
}, completion: { _ in
Timer.scheduledTimer(withTimeInterval: 3, repeats: false) { [weak self] _ in
guard self?.isHidingControls == false else {
return
}
self?.isHidingControls = true
self?.animateControls()
}
})
}
}
}