为啥即使我覆盖 touchesMoved:withEvent:,UIScrollView 的子类仍会滚动?

Posted

技术标签:

【中文标题】为啥即使我覆盖 touchesMoved:withEvent:,UIScrollView 的子类仍会滚动?【英文标题】:Why does a subclass of UIScrollView still scroll even if I override touchesMoved:withEvent:?为什么即使我覆盖 touchesMoved:withEvent:,UIScrollView 的子类仍会滚动? 【发布时间】:2012-05-11 15:30:54 【问题描述】:

ios 4 中,我认为 -touchesBegan:withEvent:、-touchesMoved:withEvent:、-touchesEnded:withEvent:、-touchesCancelled:withEvent: 是唯一可用于处理触摸的方法。

但是现在当我像这样覆盖这些方法时:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
    // not calling super. Doing nothing.

在 UIScrollView 子类中,它仍然滚动。他们是怎么做到的?

【问题讨论】:

【参考方案1】:

UIScrollView 使用 UIPanGestureRecognizer 来滚动。 UIKit 通过私有机制向手势识别器发送事件,独立于 touchesBegan:withEvent: 和相关方法。

【讨论】:

@MikhaloIvanokov UIPanGestureRecognizer 从 3.2 开始提供。 UIScrollView 从 iOS 3.2 开始使用 UIPanGestureRecognizer。在 iOS 5.0 之前,它只是不直接将其公开为 panGestureRecognizer 属性。如果您查看早期系统上的 gestureRecognizers 属性的内容,您会在该数组中找到它。

以上是关于为啥即使我覆盖 touchesMoved:withEvent:,UIScrollView 的子类仍会滚动?的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使单元测试全部通过,我的代码覆盖率也为零?

为啥?单元测试覆盖率中显示的类即使没有添加到测试目标中

为啥有些人使用 PriorityQueue 覆盖比较器函数来实现 minheap,即使 Java 中的 PQ 默认是最小堆?

为啥我的覆盖率报告显示红色覆盖线?

当用户是管理员时,为啥 .NET 应用程序不能覆盖文件?

为啥我不能使用 write.xlsx 追加 [重复]