1

我有一個UICollectionView與單行,並且每個單元格有不同width,(根據特定標準)。每個cell都有一個float timeInSeconds屬性與之關聯。自動滾動的UICollectionView - iOS

我想水平自動滾動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; 
} 

我的水平視圖的屏幕截圖: enter image description here

我相信問題是X偏移計算,因爲它多少步應根據一些公式移動。我的公式失敗:(

請指導,以如何根據與細胞。感謝相關的時間實現自動滾動!

+0

嘗試打印「w」值後,你增加它,看看它是否相應增加。 – Sebyddd

+0

@Sebyddd已經做了,它確實增加了,但是滾動並不是根據'cell'的時間。就像所討論的「單元格」有4秒相關聯,那麼單元格應該在4秒內通過屏幕。但是這沒有發生。滾動非常緩慢。 – hyd00

+0

更改偏移量時會發生什麼?滾動位置是否改變或停留在同一個地方? – Sebyddd

回答

0

在物理,space = velocity * time,所以w應由velocity * time(增量遞增時間對於每個0.01秒)。
如果單元格的分享範圍持續時間保存在_messagesArray[lastIndexPath.row][@"duration"],你應該能夠計算velocityspace/time
因此,增量應該這樣

定義
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; 
+0

試過了。它開始緩慢但逐漸增加速度。總之不工作。但是感謝那個努力的人。欣賞。還想出如何解決這個問題:S – hyd00

+0

@Sha,如果collectionView的寬度是恆定的(我認爲),速度將根據單元格的「持續時間」值而改變。每個細胞的速度是否保持不變?或者它在同一個單元格內改變? – ddb

+0

其實速度並不改變不同的細胞,如它變得緩慢和快速相應,而不是工作準確,聲音完成之前,整個的CollectionView已經滾出屏幕:( – hyd00