2016-07-07 2 views
1

Я использую scrollToItemAtIndexPath:atScrollPosition:animated для прокрутки UICollectionView. Мне нужно отключить некоторые функции, пока эта автоматическая прокрутка происходит, а затем снова включите ее, когда прокрутка заканчивается. Проблема возникает, когда я пытаюсь прокрутить до некоторой ячейки, которая уже видима, и нет необходимости прокрутки (например, это последний вид ячейки и коллекции уже прокручивается до самого конца). В этом случае вызывается scrollViewDidEndDragging или scrollViewDidEndDecelerating.Как узнать, действительно ли UICollectionView будет прокручиваться после вызова scrollToItemAtIndexPath:?

Есть ли способ узнать, действительно ли scrollToItemAtIndexPath прокрутит UICollectionView?

ответ

0

Думаю, вы можете сохранить последнее смещение вида прокрутки & отслеживать изменения в нем каждый раз, когда прокрутки scrollView & применяют действия только после значительных изменений.

 func scrollViewDidScroll(scrollView: UIScrollView) { 

      let scrollOffset = scrollView.contentOffset.y; 

      if scrollOffset < (previousValue-100) || scrollOffset > (previousValue+100) 
       { 
       // Scrolled up or down with 100 points which you can change 
       previousValue = scrollOffset 
       } 
    } 
+0

Я могу использовать 'scrollViewDidEndDragging' для этого, но что делать, когда свиток даже не запускается? Мне нужно это знать. – Jaroslav

+0

проверить это может быть полезно http://stackoverflow.com/questions/18649920/uicollectionview-current-visible-cell-index –

0

Вы можете определить, является ли scrollToItemAtIndexPath будет смещаться на основе кадра ячейки перед вызовом scrollToItemAtIndexPath. Например, если вы просто хотите клетка, чтобы быть видимым (UICollectionViewScrollPositionNone):

UICollectionViewLayoutAttributes* attrs = [collectionView layoutAttributesForItemAtIndexPath:indexPath]; 
CGRect frame = [collectionView convertRect:attrs.frame toView:self.view]; 
BOOL willScroll = !CGRectContainsRect(collectionView.frame, frame); 

Очень жаль, что scrollToItemAtIndexPath не просто сказать, будет ли он прокручивать.

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