touchescancelled被调用,而不是touchesended

问题描述:

我试图发光触摸视图,并在触摸结束时取消它。在做这件事时,我注意到当我从视图中抬起手指时,- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event方法不被调用,而是在视图上调用- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event方法。这是一种正常的行为?我认为touchesCancelled是因为系统问题(如低内存警告)而被取消时被调用的。我通过使用touchesCancelled做了我的工作,但我想知道为什么它没有正确地呼叫touchesEnded。这是一个错误吗?touchescancelled被调用,而不是touchesended

+1

这不是正常行为。我怀疑这是一个错误。答案完全取决于你的项目。没有人可以在没有看到所有相关代码部分的情况下开始猜测。 – borrrden 2012-04-26 03:09:40

当您触摸该视图并抬起手指时,不应拖动手指。如果你这样做,那么touchesCancelled:方法将被调用。所以我认为你的观点太小而无法触及。如果是的话,然后做一个大视图,然后再试一次。它会为你工作。

认为这是一个comment ..

看起来touchesCancelled被调用,而不是touchesEnded如果触摸没有在第一秒足够远动左右就开始了。如果我做出一个小而快的动作,触动取消动作会发射,因为总动作不够大;如果我慢慢做出一个小动作,在动作完成之前触动取消动作将会触发,因为iOS放弃等待看看我是否会进一步移动。显然,iOS正在对移动是多么“重要”做出判断,并将小动作视为取消触摸。

如果有帮助,您可以简单地从touchesCancelled调用touchesEnded。但是在移动速度很快的情况下,直到超时时间才会调用它,所以在移动实际结束和触发取消时间之间可能存在延迟。顺便说一句,我也注意到,如果你做一个小而快的动作,然后抬起你的手指,然后开始另一个动作,在触发取消之前被触发,这不被认为是一个新的动作,并touchesBegan不会开火。这使我的应用程序中的手写功能变得复杂,因为手写都是关于小而快的移动。