Określenie kierunku jest dość proste, ale należy pamiętać, że kierunek może się zmieniać kilka razy w trakcie gestu. Na przykład, jeśli masz widok przewijania z włączonym stronicowaniem, a użytkownik przesuwa palcem, aby przejść do następnej strony, początkowy kierunek może być prawy, ale jeśli masz włączone odbijanie, na krótko nie będzie w żadnym kierunku i potem na krótko idź w lewo.
Aby określić kierunek, musisz użyć UIScrollView scrollViewDidScroll
delegata. W tym przykładzie utworzyłem zmienną o nazwie, lastContentOffset
której używam do porównania bieżącego przesunięcia zawartości z poprzednim. Jeśli jest większy, scrollView przewija w prawo. Jeśli jest mniej, scrollView przewija się w lewo:
// somewhere in the private class extension
@property (nonatomic, assign) CGFloat lastContentOffset;
// somewhere in the class implementation
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
ScrollDirection scrollDirection;
if (self.lastContentOffset > scrollView.contentOffset.x) {
scrollDirection = ScrollDirectionRight;
} else if (self.lastContentOffset < scrollView.contentOffset.x) {
scrollDirection = ScrollDirectionLeft;
}
self.lastContentOffset = scrollView.contentOffset.x;
// do whatever you need to with scrollDirection here.
}
Używam następującego wyliczenia do zdefiniowania kierunku. Ustawienie pierwszej wartości na ScrollDirectionNone ma tę dodatkową zaletę, że ustawia ten kierunek jako domyślny podczas inicjowania zmiennych:
typedef NS_ENUM(NSInteger, ScrollDirection) {
ScrollDirectionNone,
ScrollDirectionRight,
ScrollDirectionLeft,
ScrollDirectionUp,
ScrollDirectionDown,
ScrollDirectionCrazy,
};