如何获取WKInterfaceButton的触摸事件

时间:2018-12-20 05:17:50

标签: swift watchkit

enter image description here

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

触摸事件似乎在watchOS上不可用。我寻找了WKGestureRecognizer,但其中只有四个可用,但没有一个适合我的目的。我该如何实现这种行为?

1 个答案:

答案 0 :(得分:2)

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

enter image description here

现在将动作连接到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")
        }
    }