我能够理解,当用户只触摸视图时,就会调用触摸开始和结束。当用户在视图上滑动他们的手时,touches方法被调用。但是何时调用已取消的触摸,或者通过对user执行什么操作来调用此方法?
发布于 2011-06-26 20:49:10
我认为调用touchesCancelled (至少从iOS 3.2开始)最常见的原因可能是UIGestureRecognizer对手势的识别。如果您的视图附加了任何类型的手势识别器,那么提供touchesCancelled方法的自定义实现通常是非常重要的-请注意,这包括使用手势识别器的现成视图,包括UIScrollView。
默认情况下,手势识别器在识别时取消对点击测试视图的触摸传递,尽管可以禁用此行为。这涉及到向该视图发送touchesCancelled消息,很可能是在touchesBegan或touchesMoved消息之后。如果您的触摸处理代码依赖于在touchesEnded方法中实现的代码,则这可能永远不会触发,并且可能会发生某种严重的问题,因此需要正确处理touchesCancelled中的任何细节。
手势识别器功能的细节显然比我在这里提到的要复杂得多--我强烈建议阅读苹果的Gesture Recognizers文档。
此外,请查看手势识别器上的WWDC videos (从2010年开始)。
发布于 2011-07-15 20:57:47
注意:如果在touchesBegan
之后开始UIView
动画,触摸也会被取消。要防止出现这种情况,请确保包含UIViewAnimationOptionAllowUserInteraction:
例如:
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
self.aView.hidden = NO;
self.aView.alpha = 1;
} completion:nil];
发布于 2019-05-17 08:59:32
我在UIScrollView
下的一个视图上处理touchesBegan()
/touchesMoved()
,这很有挑战性。当我握手的时候,我的触摸一直被某个地方取消(不知何故,单点触摸就可以了),我正在研究如何避免被取消。我知道了,在UIScrollView上有一个属性Can Cancel On Scroll
,如果你的情况和我的情况相似,你可以勾选它以防止被取消。
听起来有很多情况下你的触摸被取消了,所以我的答案只是其中之一。
https://stackoverflow.com/questions/5739675
复制相似问题