我希望在我的应用程序中从一个子视图拖动到另一个子视图(并用一条线连接它们),因此我需要跟踪用户触摸的当前视图。
我认为我可以通过在touchesMoved方法中调用[UITouch视图]来实现这一点,但在快速查看文档之后我发现[UITouch视图]只返回初始触摸发生的视图
有人知道在拖动过程中我如何检测被触摸的视图吗?
答案 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];
}