在touchesMoved方法中检测[UITouch视图]

时间:2011-02-04 01:36:17

标签: iphone uiview drag uitouch touchesmoved

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

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

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

3 个答案:

答案 0 :(得分:3)

我的方式:

- (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];
    }
}

答案 1 :(得分:2)

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

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

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

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

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

希望这有帮助

答案 2 :(得分:0)

UIView是UIResponder的子类。因此,您可以在自定义类中覆盖touches ends / started方法,这些方法继承自UIView。您应该将委托添加到该类并为其定义协议。在方法

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

或者您需要的任何交互,只需向对象的委托发送相应的消息,同时传递此对象。 E.g。

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