如何覆盖 UICollectionView 中的 handlePan 选择器

Posted

技术标签:

【中文标题】如何覆盖 UICollectionView 中的 handlePan 选择器【英文标题】:How to override the handlePan selector in UICollectionView 【发布时间】:2017-03-16 08:32:54 【问题描述】:

在我的 tvOS 应用程序中,我正在尝试监听 UICollectionView 的滚动变化。经过研究,我发现collection view原生接收到一些手势识别器,其中一个带有选择器handlePan的UIPanGestureRecognizer:

<UIScrollViewPanGestureRecognizer: 0x101a4c1a0; state = Possible; delaysTouchesEnded = NO; view = <UICollectionView 0x1020c5d00>; target= <(action=handlePan:, target=<UICollectionView 0x1020c5d00>)>>

在日志中,或在代码中:

myCollectionView.panGestureRecognizer

我想知道是否有办法将我的控制器添加为手势识别器的目标,或者可能覆盖 handlePan 方法。 我尝试实现UIGestureRecognizerDelegate,但它没有让我访问handlePan 方法。 也许我应该在集合视图上添加一个我自己的自定义UIPanGestureRecognizer

【问题讨论】:

【参考方案1】:

UICollectionView 是 UIScrollView 的子类,因此您可以通过添加滚动视图代理来检测集合视图上的滚动变化。

目标-C

// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 



// called when scroll view grinds to a halt
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 


斯威夫特

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) 



func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) 


【讨论】:

以上是关于如何覆盖 UICollectionView 中的 handlePan 选择器的主要内容,如果未能解决你的问题,请参考以下文章

当 UICollectionView 更改布局时覆盖 UIAccessibilityLayoutChangedNotification

UICollectionView 在 iOS 11 上覆盖全屏

将静态 UIButton 覆盖到 UICollectionView

如何在 UICollectionView 中禁用选择动画?

如何在 UICollectionView 中向下移动某些单元格

UICollectionView targetContentOffsetForProposedContentOffset:被 UIScrollView 覆盖