如何获取 WKInterfaceButton 的触摸事件

How to get touch events for WKInterfaceButton

我有一个 WKInterfaceButton,用于增加用户选择的权重值。但是默认行为是每次用户按下按钮时数量增加一个,我想达到这样的效果,只要用户按住按钮,数量就应该增加,当用户抬起手指时数量的最终值应分配权重。

触摸事件在 watchOS 上似乎不可用。我寻找了 WKGestureRecognizer,但只有四个可用,其中 none 个可以满足我的目的。我怎样才能实现这种行为?

这听起来很傻,但您可以使用 WKLongPressGestureRecognizer 来做到这一点。 在界面生成器中添加一个 WKLongPressGestureRecognizer 例如到 WKInterfaceImage。将 WKLongPressGestureRecognizer 的最短持续时间设置为 0,如下面的屏幕截图所示。

现在将动作连接到 InterfaceController 中的动作。我正在使用计时器来触发增量,但您也可以使用 perform(_ aSelector: Selector, with anArgument: Any?, afterDelay delay: TimeInterval) 和一个标志(按下按钮)来执行此操作。

考虑到移动也会被检测到,但这不会影响所需的功能。

var gestureTimer:Timer?

    @IBAction func gesture(_ sender: WKLongPressGestureRecognizer) {

        switch sender.state {
        case .began:
            print("began")
            gestureTimer = Timer.scheduledTimer(withTimeInterval: 0.2, repeats: true, block: { (timer) in
                print("do something")
            })

        case .cancelled, .ended:
            print("other")
            if let timer = gestureTimer {
                timer.invalidate()
                gestureTimer = nil
            }
        default:
            print("default")
        }
    }