ios UICollectionView détecter la direction de défilement

J'ai une collectionView. Je veux détecter la direction de défilement. J'ai un style d'animation différent pour défiler vers le bas et défiler vers le haut. Je dois donc apprendre la direction du défilement.

CGPoint scrollVelocity = [self.collectionView.panGestureRecognizer velocityInView:self.collectionView.superview]; if (scrollVelocity.y > 0.0f) NSLog(@"scroll up"); else if(scrollVelocity.y < 0.0f) NSLog(@"scroll down"); 

C'est juste du travail au doigt touché. Ne fonctionne pas pour moi

Essaye ça:

Ajoutez ceci quelque part dans votre entête:

 @property (nonatomic) CGFloat lastContentOffset; 

Puis remplacez la méthode scrollViewDidScroll: :

 #pragma mark - UIScrollViewDelegate - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (self.lastContentOffset > scrollView.contentOffset.y) { NSLog(@"Scrolling Up"); } else if (self.lastContentOffset < scrollView.contentOffset.y) { NSLog(@"Scrolling Down"); } self.lastContentOffset = scrollView.contentOffset.y; } 

Trouvé dans Trouver la direction du défilement dans un UIScrollView?

C'est la meilleure façon d'get la direction de défilement, espérons que cela vous aide

 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { CGPoint targetPoint = *targetContentOffset; CGPoint currentPoint = scrollView.contentOffset; if (targetPoint.y > currentPoint.y) { NSLog(@"up"); } else { NSLog(@"down"); } } 

J'essayais de find un moyen de détecter si l'user essayait le plus souvent de tirer verticalement ou horizontalement le scrollView. Je vous donne ma solution, j'espère qu'elle pourra être utile à tous:

 CGPoint _lastContentOffset; - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { _lastContentOffset = scrollView.contentOffset; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (ABS(_lastContentOffset.x - scrollView.contentOffset.x) < ABS(_lastContentOffset.y - scrollView.contentOffset.y)) { NSLog(@"Scrolled Vertically"); } else { NSLog(@"Scrolled Horizontally"); } } 

Ce travail trouve pour moi et j'utilise ceci pour éviter le scrollView pour se déplacer horizontalement en faisant défiler verticalement et en face.