在UIScrollViewDelegate函数中
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
有时,scrollView.dragging即使在
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)willDecelerate
被称为。这在某种程度上是预期的吗?
0pizxfdo1#
不幸的是,UICollectionView.isDragging甚至UICollectionView.isTracking根本不可靠。您必须存储一个属性来跟踪拖动状态,如下所示:
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 } }
yebdmbv42#
如果scrollViewDidEndDragging:willDecelerate:的willDecelerate是YES,那么是的,这是预期的。当用户放开拖动时,您会得到scrollViewDidEndDragging,但是dragging在视觉滚动/减速完成之前不会改变。因此,当您放开拖动时,您可能会看到scrollViewDidEndDragging后面跟着一些scrollViewDidScroll(dragging仍然是YES)。或者,您可以检出tracking,一旦用户放开,它就会变成NO(即使滚动视图可能仍然在滚动)。
scrollViewDidEndDragging:willDecelerate:
willDecelerate
YES
scrollViewDidEndDragging
dragging
scrollViewDidScroll
tracking
NO
2条答案
按热度按时间0pizxfdo1#
不幸的是,
UICollectionView.isDragging
甚至UICollectionView.isTracking
根本不可靠。您必须存储一个属性来跟踪拖动状态,如下所示:yebdmbv42#
如果
scrollViewDidEndDragging:willDecelerate:
的willDecelerate
是YES
,那么是的,这是预期的。当用户放开拖动时,您会得到scrollViewDidEndDragging
,但是dragging
在视觉滚动/减速完成之前不会改变。因此,当您放开拖动时,您可能会看到scrollViewDidEndDragging
后面跟着一些scrollViewDidScroll
(dragging
仍然是YES
)。或者,您可以检出
tracking
,一旦用户放开,它就会变成NO
(即使滚动视图可能仍然在滚动)。