集合视图中的水平滚动
Horizontal scroll in collection view
我希望在我的集合视图单元格水平滚动时做一些事情。但是我不知道滚动时调用了哪个函数。
我在 table 视图单元格内有一个集合视图单元格,并且该集合视图单元格水平滚动
如果你使用storyboard,在Attributed Inspector
你会发现一个选项Scroll Direction
,设为Horizontal
,默认设置为Vertical
以编程方式
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
let collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)
- 首先,将您的集合视图的委托设置为您的viewcontroller(或视图)
- 在您的 viewcontroller 中实施 UIScrollViewDelegate 方法,您可以跟踪您的 collectionview 的滚动。
有几种方法可以在滚动集合视图时通知您,所有这些方法都包含在 UIScrollViewDelegate
中,因此在继承自前者的 UICollectionViewDelegate
协议中。
scrollViewDidScroll(_:)
确实在每次 内容偏移量变化 时被调用。这不仅意味着用户发出的主动滚动,还意味着惯性滚动、程序化滚动和弹跳。您可以使用此方法对滚动距离做出反应,例如,通过查询滚动视图的contentOffset
属性。
相比之下,scrollViewWillBeginDragging(_:)
仅在用户 发出的滚动 开始时被调用(这就是为什么在文档中您可以看到此方法可能仅在一些延迟后才被调用,因为滚动视图的手势识别器需要时间来决定它是点击还是平移手势)。在用户抬起手指并再次开始滚动之前不会再次调用它。
scrollViewWillBeginDecelerating(_:)
在上面讨论的用户发出的滚动结束时被调用,但是滚动视图将继续进一步滚动以实现这种惯性感觉。同样,在用户再次抬起手指之前不会再次调用它。
基本上就是这样。如果这仍然不能缩小您要跟踪的事件的范围(例如,您只想在用户开始滚动到初始位置时收到通知),您将需要设置一些标志或跟踪其他属性。
例如,要跟踪水平滚动,您需要将滚动视图的先前内容偏移量与当前内容偏移量进行比较,或者通过 scrollView.panGestureRecognizer.velocity(in: collectionView)
.
检查滚动速度
我希望在我的集合视图单元格水平滚动时做一些事情。但是我不知道滚动时调用了哪个函数。
我在 table 视图单元格内有一个集合视图单元格,并且该集合视图单元格水平滚动
如果你使用storyboard,在Attributed Inspector
你会发现一个选项Scroll Direction
,设为Horizontal
,默认设置为Vertical
以编程方式
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
let collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)
- 首先,将您的集合视图的委托设置为您的viewcontroller(或视图)
- 在您的 viewcontroller 中实施 UIScrollViewDelegate 方法,您可以跟踪您的 collectionview 的滚动。
有几种方法可以在滚动集合视图时通知您,所有这些方法都包含在 UIScrollViewDelegate
中,因此在继承自前者的 UICollectionViewDelegate
协议中。
scrollViewDidScroll(_:)
确实在每次 内容偏移量变化 时被调用。这不仅意味着用户发出的主动滚动,还意味着惯性滚动、程序化滚动和弹跳。您可以使用此方法对滚动距离做出反应,例如,通过查询滚动视图的contentOffset
属性。
相比之下,scrollViewWillBeginDragging(_:)
仅在用户 发出的滚动 开始时被调用(这就是为什么在文档中您可以看到此方法可能仅在一些延迟后才被调用,因为滚动视图的手势识别器需要时间来决定它是点击还是平移手势)。在用户抬起手指并再次开始滚动之前不会再次调用它。scrollViewWillBeginDecelerating(_:)
在上面讨论的用户发出的滚动结束时被调用,但是滚动视图将继续进一步滚动以实现这种惯性感觉。同样,在用户再次抬起手指之前不会再次调用它。
基本上就是这样。如果这仍然不能缩小您要跟踪的事件的范围(例如,您只想在用户开始滚动到初始位置时收到通知),您将需要设置一些标志或跟踪其他属性。
例如,要跟踪水平滚动,您需要将滚动视图的先前内容偏移量与当前内容偏移量进行比较,或者通过 scrollView.panGestureRecognizer.velocity(in: collectionView)
.