使用点击手势更改 UIView 的背景颜色(iOS)

Posted

技术标签:

【中文标题】使用点击手势更改 UIView 的背景颜色(iOS)【英文标题】:Change background color of UIView on tap using tap gesture (iOS) 【发布时间】:2019-04-16 14:32:11 【问题描述】:

我想在点击时更改UIView 的颜色,并在点击事件后将其改回原来的颜色

我已经实现了这两种方法,但它们的行为没有给我所需的结果

     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
        super.touchesBegan(touches, with: event)
        backgroundColor = UIColor.white
    


    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) 
        super.touchesEnded(touches, with: event)
        backgroundColor = UIColor.gray
    

这两种方法有效,但在按下UIView 2 秒后,它就有效了。此外,它不会在按下后将UIView 的颜色改回白色(简而言之,在我重新启动应用程序之前它会保持灰色) 我在UIView上使用轻击手势

【问题讨论】:

【参考方案1】:

您可以添加自己的手势识别器,而不是覆盖 touchesBegantouchesEnded 方法。受this answer 启发,您可以执行以下操作:

class ViewController: UIViewController 
    override func viewDidLoad() 
        super.viewDidLoad()
        view.backgroundColor = .gray
        setupTap()
    

    func setupTap() 
        let touchDown = UILongPressGestureRecognizer(target:self, action: #selector(didTouchDown))
        touchDown.minimumPressDuration = 0
        view.addGestureRecognizer(touchDown)
    

    @objc func didTouchDown(gesture: UILongPressGestureRecognizer) 
        if gesture.state == .began 
            view.backgroundColor = .white
         else if gesture.state == .ended || gesture.state == .cancelled 
            view.backgroundColor = .gray
        
    

【讨论】:

以上是关于使用点击手势更改 UIView 的背景颜色(iOS)的主要内容,如果未能解决你的问题,请参考以下文章

使用 CAGradientLayer 类更改 UiView IOS 的渐变背景图层颜色

在 SwiftUI 中更改 UIView 背景颜色

iOS 验证 uiview 已更改颜色

iOS 7 - 透明的 UIView 阻塞手势识别器

iOS:从运行循环外部设置 UIView 背景颜色

使用动画更改 UIView 背景颜色