3

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

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

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

4

3 回答 3

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];
    }
}
于 2012-01-29T16:27:03.773 回答
2

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

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

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

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

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

希望这可以帮助

于 2011-02-04T02:37:23.540 回答
0

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];
}
于 2011-02-04T01:53:56.123 回答