我正在尝试跟踪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发出信号指示单元格的位置时,即使其坐标为负/屏幕外,我也具有正确的位置。