9

Mam kolekcjęView. Chcę wykryć kierunek przewijania. Mam dwa różne style animacji do przewijania w dół i przewijania w górę. Muszę więc nauczyć się przewijania.iOS UICollectionView wykryj kierunek przewijania

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

To tylko praca przy dotknięciu palca. Nie działa mi

Odpowiedz

26

Spróbuj tego:

Dodaj gdzieś w ty header:

@property (nonatomic) CGFloat lastContentOffset; 

Następnie zastąpić metodę 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; 
} 

Znalezione w Finding the direction of scrolling in a UIScrollView?

+0

To prace Dziękuję –

2

I próbował znaleźć sposób na wykrycie, czy jest to użytkownik głównie próbuje wyciągnąć pionowo lub poziomo scrollView. Daję ci rozwiązanie, mam nadzieję, że może być przydatny każdemu:

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

} 

Prace znaleźć dla mnie i to wykorzystać, aby uniknąć Scrollview poruszać poziomo podczas przewijania w pionie i odwrotnie.

4

jest to najlepszy sposób, aby kierunek przewijania nadzieję, że to pomaga

- (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"); 
    } 
} 
Powiązane problemy