如何覆盖 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 targetContentOffsetForProposedContentOffset:被 UIScrollView 覆盖