我希望在我的应用程序中从一个子视图拖动到另一个子视图(并用一条线连接它们),因此我需要跟踪用户正在触摸的当前视图。
我认为我可以通过在 touchesMoved 方法中简单地调用 [UITouch view] 来实现这一点,但是在快速查看文档后,我发现 [UITouch view] 只返回发生初始触摸的视图。
有谁知道我如何在拖动过程中检测到被触摸的视图?
我希望在我的应用程序中从一个子视图拖动到另一个子视图(并用一条线连接它们),因此我需要跟踪用户正在触摸的当前视图。
我认为我可以通过在 touchesMoved 方法中简单地调用 [UITouch view] 来实现这一点,但是在快速查看文档后,我发现 [UITouch view] 只返回发生初始触摸的视图。
有谁知道我如何在拖动过程中检测到被触摸的视图?
我的方式:
- (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];
}
}
经过一番研究,我找到了答案。
最初,我正在检查这样的视图:
if([[touch view] isKindOfClass:[MyView* class]])
{
//hurray.
}
但是,正如我的问题中所解释的,[触摸视图] 返回发生原始触摸的视图。这可以通过将上面的代码替换为以下代码来解决:
if([[self hitTest:[touch locationInView:self] withEvent:event] isKindOfClass:[MyView class]])
{
//hurrraaay! :)
}
希望这可以帮助
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];
}