UICollectionView的自动滚动-iOS
我有一个单行的UICollectionView的自动滚动-iOS,ios,objective-c,uiscrollview,uicollectionview,uicollectionviewcell,Ios,Objective C,Uiscrollview,Uicollectionview,Uicollectionviewcell,我有一个单行的UICollectionView,每个单元格都有不同的宽度(取决于某些标准)。每个单元格都有一个与其关联的float timeInSeconds属性 我想自动水平滚动UICollectionView,这样单元格应该分别通过与该单元格关联的timeinsonds 我尝试使用NSTimer和更改contentOffset来执行此操作,但没有按照我想要的方式工作 代码: //this method is called which fires the `NSTimer` - (void)
UICollectionView
,每个单元格都有不同的宽度(取决于某些标准)。每个单元格
都有一个与其关联的float timeInSeconds
属性
我想自动水平滚动UICollectionView
,这样单元格应该分别通过与该单元格关联的timeinsonds
我尝试使用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
offset计算,根据一些公式,它应该移动多少步。我的公式失败了:(
请指导如何根据与单元格相关的时间实现自动滚动。谢谢!在物理学中,空间=速度*时间
,因此w
应增加速度*时间
(每0.01秒增量时间)。
如果单元格的可视持续时间保存在\u messagesArray[lastIndexPath.row][@“duration”]
中,则您应该能够将速度计算为空间/时间
所以,增量应该这样定义
float v = self.messagesCollectionView.frame.size.width / ([(NSNumber*)_messagesArray[lastIndexPath.row][@"duration"] floatValue]);
w += v * 0.01f;
(当然,v
每个单元格只能计算一次)
让我知道它是否有效,或者我的答案应该被编辑
编辑
基于当前单元格宽度的速度
float v = cell.bounds.size.width / ([(NSNumber*)_messagesArray[lastIndexPath.row][@"duration"] floatValue]);
w += v * 0.01f;
在物理学中,space=velocity*time
,因此w
应该增加velocity*time
(每0.01秒增量时间)。
如果单元格的可视持续时间保存在\u messagesArray[lastIndexPath.row][@“duration”]
中,则您应该能够将速度计算为空间/时间
所以,增量应该这样定义
float v = self.messagesCollectionView.frame.size.width / ([(NSNumber*)_messagesArray[lastIndexPath.row][@"duration"] floatValue]);
w += v * 0.01f;
(当然,v
每个单元格只能计算一次)
让我知道它是否有效,或者我的答案应该被编辑
编辑
基于当前单元格宽度的速度
float v = cell.bounds.size.width / ([(NSNumber*)_messagesArray[lastIndexPath.row][@"duration"] floatValue]);
w += v * 0.01f;
在增加值后,尝试打印w
值,看看它是否相应增加。@Sebyddd已经这样做了,它确实增加了,但滚动不是根据单元格的时间进行的。例如,如果所讨论的单元格有4秒与之关联,那么该单元格应该在4秒后通过屏幕。但是没有发生。滚动速度非常慢。当更改偏移量时,会发生什么情况?滚动位置会改变还是保持在同一位置?它以固定速度滚动。我希望它根据与当前可见的第一个单元格相关联的时间进行滚动。
。这就是为什么我试图通过除以来计算要移动的偏移量通过单元格的浮动时间
值
宽度..但没有帮助:(考虑到我不知道您正在计算的值。您确定计算是正确的吗?计时器每0.01秒触发一次,这是常数,因此我打赌X偏移量计算不正确。尝试在递增后打印w
值,看看它是否相应递增。@sebydd已经这样做了,它确实会递增。)se,但滚动不是根据单元格的时间进行的。例如,如果所讨论的单元格有4秒关联,则该单元格应在4秒内通过屏幕。但这并没有发生。滚动非常慢。当更改偏移量时,会发生什么情况?滚动位置会改变还是保持在e同一个位置?它以固定的速度滚动。我希望它根据与当前可见的第一个单元格相关联的时间滚动。这就是为什么我试图通过将浮动时间
值除以单元格
宽度来计算要移动的偏移量。但没有帮助:(考虑到我不知道你正在计算的值。你确定计算是正确的吗?计时器每0.01秒启动一次,这是恒定的,所以我打赌X偏移量计算是不正确的。尝试过了。它启动缓慢,但速度逐渐增加。简言之,不起作用。但感谢你的努力。感谢你的努力。谢谢。仍然是数字我们正在研究如何解决这个问题:S@Sha,如果collectionView width是常量(如我所想),则速度将根据“持续时间”而变化单元格的值。每个单元格的速度保持不变吗?还是在同一单元格内变化?实际上,不同单元格的速度确实会变化,比如相应地变慢变快,但工作不准确。在声音结束之前,整个collectionview已滚出屏幕:(所以可能问题是速度应该与单元格宽度相关,而不是与collectionView宽度相关,我将更新我的回答,但仍然无法正确滚动:(试过了。它启动缓慢,但速度逐渐增加。简言之,不起作用。但感谢你的努力。感谢你。仍在想办法解决这个问题:S@Sha,如果collectionView width是常量(如我所想),则速度将根据“持续时间”而变化单元格的值。每个单元格的速度保持不变吗?还是在同一单元格内变化?实际上,不同单元格的速度确实会变化,比如相应地变慢变快,但工作不准确。在声音结束之前,整个collectionview已滚出屏幕:(所以可能问题是速度应该与单元格宽度相关,而不是与collectionView宽度相关,我将更新我的回答,但仍然无法正确滚动:(