Abdullah
Abdullah

Reputation: 267

Change background color of UIView on tap using tap gesture (iOS)

I want to change color of UIView when it's tap and change it back to it's original color after tap event

I already implemented these 2 methods but their behavior is not giving me required results

     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
    }

These 2 methods work but after press tap on UIView for 2 seconds then it works. Moreover it doesn't change the color of UIView back to white after pressing it (In short it stays gray until I restart the app) I am using tap gestures on UIView

Upvotes: 1

Views: 3904

Answers (1)

Ahmad F
Ahmad F

Reputation: 31655

Instead of overriding touchesBegan and touchesEnded methods, you could add your own gesture recognizer. Inspired from this answer, you could do something like:

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
        }
    }
}

Upvotes: 2

Related Questions