代码之家  ›  专栏  ›  技术社区  ›  Bijoy Thangaraj

获取UIView上的最后一个触摸事件

  •  0
  • Bijoy Thangaraj  · 技术社区  · 8 年前

    注意:这是一个类似于这里所问的问题,但是 如果在我的情况下没有一个确切的解决方案的话。问题是 目标也不一样。参考: touchesBegan - Only needs the last touch action - iPhone

    我试着在一个 UIView . 我需要得到准确的触摸位置。

    目前,我正在附加这样的选择器:

    [myView addTarget:self action:@selector(touchBegan:withEvent:) forControlEvents: UIControlEventTouchDown];
    

    这是我的经纪人,

    - (void)touchBegan:(UIButton *)c withEvent:ev {
        UITouch *touch = [[ev allTouches] anyObject];
    

    问题是 [ev allTouches] 返回 NSSet 这是无序的,所以我无法得到触摸事件的确切最后位置,以防多次触摸。

    在处理多个触摸时,是否有方法可以获取案例中的最后位置?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Sandeep Bhandari    8 年前

    您始终可以创建视图的子类并覆盖 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 是您应该选择的代表,但如果您试图监视单个触摸并找到其准确的触摸点,则始终可以利用 碰撞试验

    希望有帮助

    推荐文章