ios scrollView.dragging == true after scrollViewDidEndDraging?

yks3o0rb  于 2023-04-08  发布在  iOS
关注(0)|答案(2)|浏览(137)

在UIScrollViewDelegate函数中

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

有时,scrollView.dragging即使在

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)willDecelerate

被称为。
这在某种程度上是预期的吗?

0pizxfdo

0pizxfdo1#

不幸的是,UICollectionView.isDragging甚至UICollectionView.isTracking根本不可靠。您必须存储一个属性来跟踪拖动状态,如下所示:

class YourScrollView: UIScrollView {
    var isDragging = false    

    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        isDragging = true
    }

    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        isDragging = false
    }
}
yebdmbv4

yebdmbv42#

如果scrollViewDidEndDragging:willDecelerate:willDecelerateYES,那么是的,这是预期的。当用户放开拖动时,您会得到scrollViewDidEndDragging,但是dragging在视觉滚动/减速完成之前不会改变。因此,当您放开拖动时,您可能会看到scrollViewDidEndDragging后面跟着一些scrollViewDidScrolldragging仍然是YES)。
或者,您可以检出tracking,一旦用户放开,它就会变成NO(即使滚动视图可能仍然在滚动)。

相关问题