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

Posted

技术标签:

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

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

【问题讨论】:

到目前为止您尝试过什么?您是否考虑过使用计时器和点击手势? 【参考方案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()
                    
                )
            
        
    

【讨论】:

以上是关于如何在 iOS 屏幕上点击某个区域时隐藏 UIView 并使其显示的主要内容,如果未能解决你的问题,请参考以下文章

如何防止点击屏幕上的某个区域

JS如何点击其他区域时隐藏某个标签

如何通过与 swift/xctest 协调来点击 iOS 主屏幕上的某个点

屏幕键盘出现时iOS隐藏导航栏

如果屏幕小于某个宽度,则隐藏 div

js实现点击按钮显示某个区域 然后点击页面中任意其他位置,隐藏该区域