如何获取 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")
}
}
我有一个 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")
}
}