我已经尝试了整个上午,并开始认为这是不可能的。
因此,您在屏幕上进行了触摸,它进入了响应链,并且可能做了一些事情。然后你在屏幕上移动它,它调用了 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];
(但文档中的任何内容):