您始终可以创建视图的子类并覆盖
hitTest
得到准确的接触点
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
debugPrint(point)
return super.hitTest(point, with: event)
}
这里只是记录接触点。只是为了显示它是如何工作的,我添加了
touchesBegan
在我的ViewController中,并从触摸集记录第一个触摸点
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
debugPrint(touches.first)
}
这是这两个的控制台日志
(175.66667175293175.33332824707)
可选的(
阶段:开始点击计数:1强制:0.000窗口:;层=>视图:
>在窗口中的位置:
{175.66665649414062,175.33332824707031}以前在窗口中的位置:
{175.66665649414062,175.33332824707031}视图中的位置:
{175.66665649414062,175.33332824707031}查看的先前位置:
{175.66665649414062,175.33332824707031})
所以点击测试显示,你的触摸点是(175.66667175293175.33332824707),而
touches.first
在视图中显示位置:{175.66665649414062,175.33332824707031}
基本上是一样的。
罐头
碰撞试验
用作
touchBegan
? 不
.
这就是为什么我在上面的评论中问你到底想达到什么目的。如果你在寻找持续的触摸监控
接触开始
,
touchMove
,
touchEnd
是您应该选择的代表,但如果您试图监视单个触摸并找到其准确的触摸点,则始终可以利用
碰撞试验
希望有帮助