如何在 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 并使其显示的主要内容,如果未能解决你的问题,请参考以下文章