是否可以防止UIControl
的形式在触摸超出界限时丢失isHighlighted
?看来这是在4个地方设置的:
touchesBegan
touchesMoved
touchesEnded
touchesCancelled
我可以重写这些方法并自己处理它们,但有时我想调用super
。 UIControl
处理isHighlighted
属性的方法并未向我们公开。
关于此行为的另一个烦人的事情是在isHighlighted
上反复设置了touchesMoved
,如果每当isHighlighted
发生更改时调用绘图代码,都会导致效率低下。 (即在didSet
中)。这总是迫使您检查oldValue与新值是否不同。
我最后的努力是添加一些变量来跟踪接触并迫使isHighlighted
保持不变
class AlwaysHighlightedControl: UIControl {
private var forceIsHighlighted: Bool = false
override var isHighlighted: Bool {
get { return super.isHighlighted }
set {
if newValue == false && self.forceIsHighlighted {
return
}
super.isHighlighted = newValue
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.forceIsHighlighted = true
super.touchesBegan(touches, with: event)
}