【问题标题】:How do I hide UIView and make it appear when an area is tapped on screen in iOS如何在 iOS 屏幕上点击某个区域时隐藏 UIView 并使其显示
【发布时间】:2016-11-08 21:24:16
【问题描述】:

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

【问题讨论】:

  • 到目前为止您尝试过什么?您是否考虑过使用计时器和点击手势?

标签: ios uiview


【解决方案1】:

向 AVplayerLayer 添加触摸事件,当用户触摸播放器时,将其取消隐藏 5 秒,然后在 5 秒后隐藏它。如果您愿意,可以添加隐藏和取消隐藏的动画。

或 如果你直接使用 avplayerviewcontroller 你可以简单地说 showPlayBackControls=true;

【讨论】:

    【解决方案2】:

    假设您的容器视图位于视频层的顶部,请在您的视图中添加一个轻击手势识别器,并跟踪您的控件是否正在显示。当状态改变时,改变动画。在这里,我只是将所有子视图 alpha 设置为淡入/淡出,但您可以轻松地将转换设置为滑入淡出。当控件出现在屏幕上时,您设置一个倒数计时器并让计时器关闭控件。您还可以保留对这个计时器的引用,然后在每次用户与 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()
                        }
                    })
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      相关资源
      最近更新 更多