2014-05-13 16 views

Odpowiedz

20

Czy próbowałeś następujące elementy?

[self.collectionView setContentOffset:self.collectionView.contentOffset animated:NO]; 

własnością contentOffset jest stale aktualizowana, jak przewija CollectionView (nawet za pośrednictwem animacji), więc w momencie wywołania powyższego, należy go nadzieją zmusić CollectionView zatrzymać dotychczasową animację.

+2

Nie działa, należy zmienić wartość y lub x. Użyłem tego i działa: 'CGPoint offset = self.collectionView.contentOffset; (self.collectionView.contentOffset.y> 0)? offset.y--: offset.y ++; [self.collectionView setContentOffset: przesunięcie animowane: NIE]; ' –

1

Zastosuj następującą metodę: scrollViewDelegate, aby odebrać, gdy użytkownik puści przeciąganie kolekcji.

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset; 

Następnie można po prostu stworzyć swój własny blok animacji, aby ustawić w zależności prędkość/ostateczne przeznaczenie myślisz wygląda najlepiej przy użyciu właściwości contentOffset.

+0

Będzie nie pasuje do mojego scenariusza. Muszę być w stanie przerwać animację w dowolnym momencie. –

+1

Haha OK, po prostu ustaw właściwość contentOffset w dowolnym momencie. Zmusi to do zatrzymania się. –

+0

'self.collectionView.contentOffset = CGPointZero;' ustawia przesunięcie treści na początek, ale nie powoduje przerwania animacji. Po prostu kontynuuje od 0,0. –

25

Spróbuj tego. Pracował dla mnie. :)

self.collectionView.scrollEnabled = NO; 
+0

Nadal można dotknąć elementów, aby przewinąć do nich: / –

0

jeśli masz "pagingEnabled" i "scrollEnabled" właściwości ustawiony na "true", niż to powinno działać:

self.collectionView.scrollEnabled = false 
    self.collectionView.pagingEnabled = false 
2

Dla Swift 3:

collectionView.isScrollEnabled = false 
Powiązane problemy