在 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 计时器无效