如何确定UICollectionView将scrollToItemAtIndexPath的单元格滚动多少?

时间:2019-02-11 02:29:19

标签: ios objective-c iphone uicollectionview uicollectionviewcell

我正在尝试跟踪pick项,该项随着用户滚动集合视图而在屏幕外移动,方法是每次滚动都更新滚动偏移量。问题是,由于iOS处理视图动画,因此我不确定如何计算滚动量。这是我尝试过的:

UICollectionView

此方法的问题在于// Get rightmost cell visible: const CGPoint edgeUpperRight = CGPointMake(CGRectGetMaxX(_collectionView.frame), CGRectGetMinY(_collectionView.frame)); const CGPoint boxLocation = [self.view convertPoint:edgeUpperRight toView:_collectionView]; NSIndexPath* indexPath = [_collectionView indexPathOfCellClosestToPoint:boxLocation]; UICollectionViewCell* cell = [_collectionView cellForItemAtIndexPath:indexPath]; const CGPoint oldCenter = cell.center; // Scroll so that the rightmost cell becomes the leftmost: [_collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:YES]; // Determine amount of scroll by subtracting old from new. cell = [_collectionView cellForItemAtIndexPath:indexPath]; const CGPoint newCenter = cell.center; // Scrolling RIGHT should move all cells to the LEFT: const CGFloat dxScroll = oldCenter.x - newCenter.x; 始终为零,因为显然调用dxScroll不会立即更改数据!我想知道的是,如何确定滚动量?有什么方法可以预先计算它,或者在滚动后从iOS获取它?

我需要知道这些信息,因为我正在跟踪滚动期间不在屏幕上的单元格,一旦它离开屏幕,使用scrollToItemAtIndexPath不再返回非cellForItemAtIndexPath视图。因此,我尝试在用户滚动时计算和跟踪单元格(或更确切地说,即使在回收单元格之后,也是如此)。这样,例如当我需要通过动画或某些UI发出信号指示单元格的位置时,即使其坐标为负/屏幕外,我也具有正确的位置。

0 个答案:

没有答案