在 UICollectionViewCompositionalLayout 中的正交部分检测 userEvent/pan/scroll
Detect userEvent/pan/scroll on orthogonal sections in UICollectionViewCompositionalLayout
我在使用组合布局的 collectionView 的正交部分上使用 autoScroll。我需要在用户手动滚动该部分后立即使自动滚动计时器失效。
我可以使用 scrollViewDidBeginDragging
/ scrollViewWillBeginDecelerating
,但 scrollView 委托永远不会在正交部分被调用。
在这种情况下,如果有人有任何解决方法来检测用户滚动事件,那将会很有帮助。谢谢。
在尝试了几种解决方案后,我找到了最好和最简单的解决方案。
我在 UICollectionViewCell 中添加了一个 UIPanGestureRecogniser 来监听用户平移事件。在选择器中,我只是使计时器无效。而已!
我们还需要通过覆盖 gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
来 return true 以便垂直滚动和水平滚动正常工作。
这是我添加到 UICollectionViewCell class:
class CustomCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: .zero)
pan = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
pan.delegate = self
self.addGestureRecognizer(pan)
}
@objc private func handlePan(_ pan: UIPanGestureRecognizer) {
delegate?.invalidateTimer()
}
}
extension CustomCell: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
有了这个,每次用户尝试滚动时,我都会使 autoScroll 计时器无效
我在使用组合布局的 collectionView 的正交部分上使用 autoScroll。我需要在用户手动滚动该部分后立即使自动滚动计时器失效。
我可以使用 scrollViewDidBeginDragging
/ scrollViewWillBeginDecelerating
,但 scrollView 委托永远不会在正交部分被调用。
在这种情况下,如果有人有任何解决方法来检测用户滚动事件,那将会很有帮助。谢谢。
在尝试了几种解决方案后,我找到了最好和最简单的解决方案。
我在 UICollectionViewCell 中添加了一个 UIPanGestureRecogniser 来监听用户平移事件。在选择器中,我只是使计时器无效。而已!
我们还需要通过覆盖 gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
来 return true 以便垂直滚动和水平滚动正常工作。
这是我添加到 UICollectionViewCell class:
class CustomCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: .zero)
pan = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
pan.delegate = self
self.addGestureRecognizer(pan)
}
@objc private func handlePan(_ pan: UIPanGestureRecognizer) {
delegate?.invalidateTimer()
}
}
extension CustomCell: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
有了这个,每次用户尝试滚动时,我都会使 autoScroll 计时器无效