所以我一直试图检测到长按一个Apple TV遥控箭头按钮(触摸触摸板的边缘时触发),它似乎不适用于箭头,仅适用于你点击的物理按钮。基本上是:
print(l1, l2, sep='\n')
[0, 1, 2, -5, 4, 5, 6, 7, 8, 9]
[0, 1, 2, -5, 4, 5, 6, 7, 8, 9]
我尝试用// This works
let longSelectRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPressed(_:)))
longSelectRecognizer.allowedPressTypes = [UIPressType.Select.rawValue)]
self.addGestureRecognizer(longSelectRecognizer)
// This doesn't
let longArrowRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPressed(_:)))
longArrowRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.LeftArrow.rawValue), NSNumber(integer: UIPressType.RightArrow.rawValue)]
self.addGestureRecognizer(longArrowRecognizer)
替换它,但是在按住箭头时没有检测到(正如预期的那样)
答案 0 :(得分:1)
我相信这是因为向下/向上/向右/向左箭头是虚拟按压。他们从touchesBegan / Ended重新播出。
你可以检查向下/向上/向右/向左长按的唯一方法是在touchesBegan / Ended中计算touch.timestamp。
var touchStart: TimeInterval?
override public func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
touches.forEach({ touch in
switch touch.type{
case .indirect:
self.touchStart = touch.timestamp
break
default:
break
}
})
}
override public func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
touches.forEach({ touch in
switch touch.type{
case .indirect:
if
let start = self.touchStart,
(touch.timestamp - start < 0.5){
super.touchesEnded(touches, with: event)
}else {
self.performSegue(withIdentifier: SegueEnum.showOverlaySegue.rawValue, sender: nil)
}
break
default:
break
}
})
}