有没有办法在 iOS 中中断活动的 UITouch

Posted

技术标签:

【中文标题】有没有办法在 iOS 中中断活动的 UITouch【英文标题】:Is there a way to interrupt an active UITouch in iOS 【发布时间】:2014-02-11 20:17:41 【问题描述】:

我有一个 UIScrollView,其 'bounces' 属性设置为 YES。 当 contentOffset 移过屏幕顶部时,我会显示一个类似于邮件程序的动画活动指示器。

如果在某个时候我可以模仿用户抬起手指,那就太好了——实际上取消了gestureReconizer中的触摸并强制touchesEnded。

ios 中,有没有办法中断活动的触摸并完全取消它,或者可能将它传递到无处或不会悄悄地响应它的视图?这是一个活跃的 UITouch。大多数(如果不是全部)方法都是在手指触摸屏幕之前设置的。在这种情况下它们无效。

我寻找直接取消 UITouches 的方法,完全取消用户交互,甚至尝试直接以活动滚动视图的方式简单地插入视图,但没有效果。

有没有办法做到这一点,还是被苹果之神严厉禁止?

【问题讨论】:

【参考方案1】:

您是在使用任何自定义手势识别器还是仅使用常规滚动视图行为?

取消手势识别器的一种方法是禁用并再次启用它。

gesture.enabled = NO;
gesture.enables = YES;

如果您使用常规的滚动视图行为,我会建议使用相同的方法,但要使用 userInteractionEnabled 属性

scrollView.userInteractionEnabled = NO;
scrollView.userInteractionEnabled = YES;

或许:

scrollView.scrollEnabled = NO;
scrollView.scrollEnabled = YES;

【讨论】:

从我执行的测试中,这些属性都需要在触摸开始之前设置。我现在正在学习的是我走错了启蒙之路,我需要子类:***.com/questions/1685956/uiscrollview-touchesbegan/… 否,如果您在触摸过程中禁用手势、滚动或交互并重新启用,则触摸将被取消。 所以,我没有测试禁用手势本身,但我确实在滚动视图上测试了这两种方法。 scrollView.userInteractionEnabled = NO 并没有中断交互,但是一旦触摸结束,我就无法滚动滚动视图。另一方面,关闭 scrollEnabled 关闭了业务,我这样做了: CGPoint SlideOffset = verticalSlide.contentOffset; verticalSlide.scrollEnabled = NO; verticalSlide.contentOffset = SlideOffset; [UIView animateWithDuration:1.0 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:(void (^)(void)) ^ verticalSlide.contentOffset = CGPointZero; completion:^(BOOL finished) verticalSlide.scrollEnabled = YES;];

以上是关于有没有办法在 iOS 中中断活动的 UITouch的主要内容,如果未能解决你的问题,请参考以下文章

UITouch 不适用于 ios8

iOS开发UITouch触摸API简介

iOS开发UITouch触摸API简介

iOS学习之事件处理的原理

使用 JavaScript 中断 iOS 滚动

如何在 iOS 上从 UITouch 找到最近的车站点