我在我的UIView中添加了两个手势识别器
func tap(sender: UITapGestureRecognizer){
if sender.state == .began {
print("snapping photo")
}
}
func longPress(sender: UILongPressGestureRecognizer) {
if sender.state == .began {
print("snapping video")
}
}当两者都设置为state == .began时,只有longPress触发。当我设置点击.ended时,两者都着火了。
为什么当它的状态设置为.began时不工作
发布于 2014-11-05 19:38:31
处理UIKit手势告诉我们:
手势识别器分为两种类型:离散型和连续型。离散手势识别器精确地在手势被识别后调用一次动作方法。在满足初始识别条件后,连续手势识别器多次调用您的操作方法,每当手势事件中的信息发生变化时都会通知您。 ..。 手势识别器的
state属性通信对象的当前识别状态。对于连续的手势,手势识别器将此属性的值从.began更新到.changed到.ended,或更新到.cancelled。您的操作方法使用此属性来确定适当的操作过程。
UITapGestureRecognizer是一个离散的手势,因此,当手势被识别时,事件处理程序就会被调用一次。在实践中,这意味着您的点击手势识别器处理程序将不被调用状态为.began。然而,它被称为.ended状态。
( 处理UIKit手势文档告诉我们,离散手势的处理程序将被称为“精确一次”。这与我的经验是一致的。令人困惑的是,点击手势文档和处理轻触手势引用表明,应该测试.ended的状态,尽管在实践中,这是唯一会调用抽头手势处理程序的状态。无论如何,虽然寻找.ended的状态可能是谨慎的,但永远不要期望在离散手势处理程序中看到.began的状态。)
另一方面,UILongPressGestureRecognizer是一个连续的手势,因此检查状态非常有用(确定手势.began、.changed、.ended等的时间)。这就是为什么你看到它被称为state of .began。
https://stackoverflow.com/questions/26763997
复制相似问题