Reputation: 2780
I have a UIButton
which highlighted state involves removing the shadow. What I tried doing is putting a UILongPressGestureRecognizer
onto the button:
let gesture = UILongPressGestureRecognizer(target: self, action: #selector(self.removeShadow))
gesture.numberOfTapsRequired = 1
gesture.numberOfTouchesRequired = 1
gesture.delaysTouchesBegan = false
gesture.delaysTouchesEnded = false
gesture.minimumPressDuration = 0.01
self.addGestureRecognizer(gesture)
Then in my action, I'm using the states to hide and show the shadow:
@objc func removeShadow(gesture: UILongPressGestureRecognizer) {
if gesture.state == .recognized {
UIView.animate(withDuration: 0.1, animations: {
self.layer.shadowOpacity = 0
})
} else if gesture.state == .ended {
UIView.animate(withDuration: 0.1, animations: {
self.layer.shadowOpacity = 0.15
})
}
}
However, this doesn't seem to trigger anything. The shadow keeps living under the button. Am I missing something here?
Thanks.
Upvotes: 1
Views: 1224
Reputation: 58049
Your gesture recognizer is being overridden by the selector of the button. It'd be better in your scenario to override the button and hide its shadow when it's selected.
class ShadowButton: UIButton {
override var isHighlighted: Bool {
didSet {
UIView.animate(withDuration: 0.1) {
self.layer.shadowOpacity = self.isHighlighted ? 0 : 0.15
}
}
}
}
Upvotes: 4