为啥即使我覆盖 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 默认是最小堆?