1

У меня есть UICollectionView с одной строкой, и каждая ячейка имеет разные width (в зависимости от определенных критериев). Each 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 Сделано, что уже, он действительно увеличивается, но прокрутка не соответствует времени «ячейки». Например, если связанная с этим ячейка имеет 4 секунды, ячейка должна пройти экран за 4 секунды. Но этого не происходит. прокрутка очень медленная. – hyd00

+0

Что именно происходит при изменении смещения? Изменена ли позиция прокрутки или она остается в одном месте? – Sebyddd

ответ

0

в физике, space = velocity * time, так w должен быть увеличен на velocity * time (дельта время для каждого 0,01 секунды).
Если продолжительность Запись видна из ячейки сохраняется в _messagesArray[lastIndexPath.row][@"duration"], вы должны быть в состоянии вычислить velocity в space/time.
Таким образом, прирост должен быть определен как этот

float v = self.messagesCollectionView.frame.size.width/([(NSNumber*)_messagesArray[lastIndexPath.row][@"duration"] floatValue]); 
w += v * 0.01f; 

(конечно v должен быть рассчитан только один раз в клетку)

дайте мне знать, если он работает или мой ответ должен быть отредактирован

EDIT

скорости на основе текущей ячейки width

float v = cell.bounds.size.width/([(NSNumber*)_messagesArray[lastIndexPath.row][@"duration"] floatValue]); 
w += v * 0.01f; 
+0

Пробовал. Он начинает медленно, но постепенно увеличивает скорость. Короче, не работает. Но спасибо за усилия человека. Цените. Еще разобраться, как это решить: S – hyd00

+0

@Sha, если коллекцияView width является постоянной (как я думаю), скорость изменится в зависимости от значения «длительности», которое у вас есть для ячейки. Сохраняется ли постоянная скорость для каждой ячейки? или он изменяется внутри одной и той же ячейки? – ddb

+0

На самом деле скорость меняется для разных ячеек, например, она медленная и быстрая, но не работает точно, до того, как звук заканчивается, весь просмотр коллекции прокручивается из экрана :( – hyd00

Смежные вопросы