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

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

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

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

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

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

【问题讨论】:

    标签: ios objective-c uiscrollview uigesturerecognizer uitouch


    【解决方案1】:

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

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

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

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

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

    或许:

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

    【讨论】:

    • 从我执行的测试中,这些属性都需要在触摸开始之前设置。我现在正在学习的是我走错了启蒙之路,我需要子类:stackoverflow.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;}];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多