【发布时间】:2018-04-07 20:35:26
【问题描述】:
下面的视图控制器代码演示了我的问题。它会打印一些调试语句以响应触摸事件和捏合手势。
如果手势识别器被禁用,并且我在屏幕上拖动手指,一切都会按预期进行:控制器会得到一个touchesBegan、一堆touchesMoved 和一个touchesEnded。但是,如果我启用手势识别器并将其delaysTouchesBegan 属性设置为true,并拖动一个手指,控制器将只接收touchesBegan 和touchesEnded 调用——没有touchesMoved。
delaysTouchesBegan 的文档建议触摸事件会在手势识别器失败后堆积并传递。这是预期的行为 - 丢失所有 touchesMoved 事件吗?
class ViewController: UIViewController {
var gr: UIPinchGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
gr = UIPinchGestureRecognizer(target: self, action: #selector(pinched(_:)))
gr.delaysTouchesBegan = true
view.addGestureRecognizer(gr)
}
@IBAction func buttonTapped(_ sender: Any) {
gr.isEnabled = !gr.isEnabled
print("pinch recognizer enabled: \(gr.isEnabled)")
}
@objc func pinched(_ gr: Any?) {
print("pinched")
}
var i = 0
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
i = 0
print("touchesBegan")
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touchesMoved \(i)")
i += 1
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touchesEnded")
}
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touchesCancelled")
}
}
【问题讨论】:
标签: ios uigesturerecognizer ios11 touchesmoved