scrollView.dragging == true after scrollViewDidEndDragging?

问题描述 投票:0回答:2

好像在UIScrollViewDelegate函数里

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

有时,scrollView.dragging 即使在之后也是如此

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

被称为。

这是预料之中的吗?

ios uiscrollview uiscrollviewdelegate
2个回答
1
投票

如果

willDecelerate
scrollViewDidEndDragging:willDecelerate:
YES
,那么是的,这是预期的。当用户放开拖动时,您会得到
scrollViewDidEndDragging
,但是
dragging
在视觉滚动/减速完成之前不会改变。因此,当您放开阻力时,您可能会看到
scrollViewDidEndDragging
之后是一些
scrollViewDidScroll
(并且
dragging
仍然是
YES
)。

或者,您可以查看

tracking
,一旦用户松开它就会变成
NO
(即使滚动视图可能仍在滚动)。


0
投票

不幸的是,

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.