9

Ho una collezioneView. Voglio rilevare la direzione di scorrimento. Ho due diversi stili di animazione per scorrere verso il basso e scorrere verso l'alto. Quindi devo imparare la direzione di scorrimento.ios UICollectionView rileva direzione scorrimento

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"); 

Questo è solo un lavoro toccato con le dita. Non funziona per me

risposta

26

provate questo:

Aggiungi questo da qualche parte in voi Intestazione:

@property (nonatomic) CGFloat lastContentOffset; 

Quindi l'override del metodo 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; 
} 

Trovato in Finding the direction of scrolling in a UIScrollView?

+0

Si tratta di opere Grazie –

2

I stava cercando di trovare un modo per rilevare se l'utente è principalmente cercando di tirare verticalmente o orizzontalmente la scrollView. Vi do la mia soluzione, spero che possa essere utile a chiunque:

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"); 
    } 

} 

Questo lavoro trovare per me e io uso questo per evitare lo ScrollView per spostare orizzontalmente quando lo scorrimento in verticale e di fronte.

4

questo è il modo migliore per ottenere direzione di scorrimento, spero che questo ti aiuta

- (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"); 
    } 
}