防止UIControl在触摸超出界限时丢失isHighlighted

时间:2018-07-21 06:32:36

标签: uicontrol

是否可以防止UIControl的形式在触摸超出界限时丢失isHighlighted?看来这是在4个地方设置的:

  • touchesBegan
  • touchesMoved
  • touchesEnded
  • touchesCancelled

我可以重写这些方法并自己处理它们,但有时我想调用superUIControl处理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)
     }

0 个答案:

没有答案