【问题标题】:detecting the [UITouch view] in touchesMoved method在 touchesMoved 方法中检测 [UITouch view]
【发布时间】:2011-02-04 01:36:16
【问题描述】:

我希望在我的应用程序中从一个子视图拖动到另一个子视图(并用一条线连接它们),因此我需要跟踪用户正在触摸的当前视图。

我认为我可以通过在 touchesMoved 方法中简单地调用 [UITouch view] 来实现这一点,但是在快速查看文档后我发现 [UITouch view] 只返回发生初始触摸的视图.

有谁知道我如何在拖动过程中检测到被触摸的视图?

【问题讨论】:

    标签: iphone uiview drag uitouch touchesmoved


    【解决方案1】:

    我的方式:

    - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
        UITouch *touch = [touches anyObject];
        if ([self pointInside:[touch locationInView:self] withEvent:event]) {
            [self sendActionsForControlEvents:UIControlEventTouchUpInside];
        } else {
            [self sendActionsForControlEvents:UIControlEventTouchUpOutside];
        }
    }
    

    【讨论】:

      【解决方案2】:

      经过一番研究,我找到了答案。

      最初,我是这样检查视图的:

      if([[touch view] isKindOfClass:[MyView* class]])
      {
         //hurray.
      }
      

      但是,正如我的问题中所解释的,[触摸视图] 返回发生原始触摸的视图。这可以通过将上面的代码替换为以下代码来解决:

      if([[self hitTest:[touch locationInView:self] withEvent:event] isKindOfClass:[MyView class]])
      {
          //hurrraaay! :)
      }
      

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        UIView 是 UIResponder 的子类。因此,您可以在您的自定义类中覆盖从 UIView 继承的触摸结束/开始方法。比您应该向该类添加委托并为其定义协议。在方法中

        - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
        - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
        

        或您需要的任何交互只需向对象的委托发送适当的消息,同时传递该对象。例如

        - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
           [delegate touchesBeganInView: self withEvent: event];
        }
        

        【讨论】:

        • 感谢 Max 的回答,但我展示的代码更容易实现:) 非常感谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多