我正试图在触摸时发光,并在触摸结束时将其取下。在执行此操作时,我注意到当我从视图中抬起手指时,未调用- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
方法,而是在视图上调用- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
方法。这是正常的行为吗?我认为如果由于低内存警告等系统问题而取消触摸,则会调用touchesCancelled
。我通过使用touchesCancelled完成了我的工作但是我想知道为什么它没有正确地调用touchesEnded
。这是一个错误吗?
答案 0 :(得分:2)
当您触摸该视图并抬起手指时,不应拖动手指。如果你喜欢这样,那么touchesCancelled:
方法将被调用。所以我认为你的观点太小,无法触及。如果是,那么制作一个大视图并再次尝试。它会对你有用。
将此视为comment
..
答案 1 :(得分:0)
这不是正常现象。举起手指时,应该调用touchesEnded。
touchesCancelled应该在触摸过程中移除视图或发生系统事件(例如,手指触摸屏幕时锁定手机)时调用
请参阅touchesEnded和touchesCancelled的文档。
没有代码,就无法判断正在发生什么。但是,似乎即使您设法按应有的方式被touchedEnded调用,您都希望对这两种情况都做出响应。迅速:
~$ sudo apt -y install cgroupfs-mount
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package cgroupfs-mount is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'cgroupfs-mount' has no installation candidate
答案 2 :(得分:0)
我遇到这样一种情况:使用自动UIModalPresentationOverFullScreen呈现文档窗口会导致一个窗口,即使它是模态的,它也可以上下移动一点。当我通过跟踪子视图的父视图的触摸来移动子视图时,只要调用touchsCancelled就足够了。如果我抓住子视图的边缘并且手指移动得太快,则显示的窗口将稍微移动并取消触摸,该触摸被称为touchesCancelled。
答案 3 :(得分:-1)
如果触摸在开始后的第一秒左右移动得不够远,看起来会调用touchesCancelled而不是touchesEnded。如果我进行一次小而快速的动作,那么触碰取消将触发,因为总动作不够大;如果我慢慢做一个小动作,触摸取消将在动作完成之前触发,因为iOS放弃等待看我是否会进一步移动。显然,iOS正在判断移动是多少“重要”,并将小动作视为取消触摸。
如果有帮助,您可以直接从touchesCancelled调用touchesEnded。但是在快速移动的情况下,直到超时时间才会调用,因此在移动实际结束和触发触发的时间之间可能存在延迟。
顺便说一下,我还注意到,如果你做一个小的,快速的动作,然后抬起你的手指,然后开始另一个动作,在触摸被触发之前,这不被认为是一个新的动作,触摸开始不会发射。这使我的应用程序中的手写功能变得复杂,因为手写是关于小而快速的动作。