我有一个UIButton,其中突出显示状态涉及去除阴影。我尝试做的是在按钮上放置UILongPressGestureRecognizer:

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)

然后在动作中,我使用状态来隐藏和显示阴影:
 @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
        })
    }
}

但是,这似乎没有触发任何东西。阴影一直存在于按钮下方。我在这里想念什么吗?

谢谢。

最佳答案

您的手势识别器已被按钮的选择器覆盖。在您的方案中,最好覆盖按钮并在选择按钮时隐藏其阴影。

class ShadowButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            UIView.animate(withDuration: 0.1) {
                self.layer.shadowOpacity = self.isHighlighted ? 0 : 0.15
            }
        }
    }
}

10-08 01:01