如何隐藏UIView并在iOS屏幕上点击某个区域时显示它

时间:2016-11-08 21:24:16

标签: ios uiview

我正在构建一个视频播放器。我在我用于AVPlayerLayer的UIView上添加了一个controlsContainer UIView(包含自定义播放控件)。如何使这个controlsContainer视图在出现几秒后始终隐藏,并且仅在YouTube iOS App的视频播放器中轻敲AVPlayerLayer的某个区域时重新出现?

2 个答案:

答案 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()
                    }
                })
            }
        }
    }