【发布时间】:2016-07-29 07:00:09
【问题描述】:
我有一个单行的UICollectionView,每个单元格都有一个不同的width,(取决于某些标准)。每个cell 都有一个与之关联的float timeInSeconds 属性。
我想自动水平滚动UICollectionView,这样单元格应该分别传入与该单元格关联的timeInSeconds。
我尝试使用 NSTimer 并更改 contentOffset 来执行此操作,但没有按我的意愿工作。
代码:
//this method is called which fires the `NSTimer`
- (void)configAutoscrollTimer {
w = self.messagesCollectionView.contentOffset.x;
autoScrollTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}
- (void)onTimer {
[self autoScrollView];
}
- (void)autoScrollView {
NSIndexPath *lastIndexPath = [NSIndexPath indexPathForRow:_currentPlayIndex inSection:0];
UICollectionViewCell *cell = [_messagesCollectionView cellForItemAtIndexPath:lastIndexPath];
w += ([(NSNumber*)_messagesArray[lastIndexPath.row][@"duration"] floatValue])/cell.bounds.size.width;
CGPoint offsetPoint = CGPointMake(w, 0);
self.messagesCollectionView.contentOffset = offsetPoint;
}
我认为问题在于X 偏移量计算,至于它应该根据某些公式移动多少步。我的公式失败了:(
请指导如何实现根据单元格关联的时间自动滚动。谢谢!
【问题讨论】:
-
在增加
w值后尝试打印它,看看它是否相应增加。 -
@Sebyddd 已经完成了,它确实增加了,但是滚动不是根据
cell的时间。就像如果有问题的cell有 4 秒与之关联,那么单元格应该在 4 秒内通过屏幕。但这并没有发生。滚动很慢。 -
更改偏移量时究竟会发生什么?滚动位置是改变还是停留在同一个地方?
-
它以固定的速度滚动。我希望它根据与当前可见的第一个
cell关联的时间滚动。这就是为什么我试图通过除以 @ 来计算要移动的偏移量987654337@ value bycellwidth .. 但没有帮助:( -
考虑到我不知道您正在计算的值。你确定计算正确吗?计时器每 0.01 秒触发一次,这是恒定的,所以我敢打赌 X 偏移量计算不正确。
标签: ios objective-c uiscrollview uicollectionview uicollectionviewcell