-1

我已经尝试了整个上午,并开始认为这是不可能的。

因此,您在屏幕上进行了触摸,它进入了响应链,并且可能做了一些事情。然后你在屏幕上移动它,它调用了 touchesMoved: 方法(与触摸相关的 uiResponder 方法),也许还做了其他的事情。在这一点上,无论如何,触摸继续在屏幕中移动,当它进入其他一些uiView时,uiTouch被重新初始化(我的意思是,在第一个uiView中调用touchEnded,然后在新的uiView调用touchesBegan,然后如果继续移动调用 touchesMoved)。

我试图 resignFirstResponder 并手动调用这些方法,但我不能。我一直认为应该有一个非常简单的答案。就像是

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.superview];
if (!CGRectContainsPoint(self.frame, location)) {
    [touch restart];
}

或者

[[touch phase] restart];

(但文档中的任何内容):

4

1 回答 1

0

我的建议是拥有您想要转换以接收触摸的所有视图的超级视图,然后对 touchesMoved/Began/Ended 方法中的子视图进行命中测试(可能通过 CGRectContainsPoint(...)),并且相应地传递触摸(在子视图上调用相应的 touchesBegan/Moved/Ended 方法)。

于 2012-06-06T18:58:01.303 回答