Определить направление довольно просто, но имейте в виду, что направление может изменяться несколько раз в течение жеста. Например, если у вас есть представление прокрутки с включенной подкачкой и пользователь проводит пальцем, чтобы перейти на следующую страницу, начальное направление может быть вправо, но если у вас включен отскок, он на короткое время вообще не будет двигаться и затем кратко идти влево.
Чтобы определить направление, вам нужно будет использовать UIScrollView scrollViewDidScroll
делегата. В этом примере я создал переменную с именемlastContentOffset
которую я использую для сравнения текущего смещения содержимого с предыдущим. Если оно больше, то scrollView прокручивается вправо. Если это меньше, тогда scrollView прокручивает влево:
// 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.
}
Я использую следующее перечисление, чтобы определить направление. Установка первого значения в ScrollDirectionNone имеет дополнительное преимущество, заключающееся в том, что это направление по умолчанию используется при инициализации переменных:
typedef NS_ENUM(NSInteger, ScrollDirection) {
ScrollDirectionNone,
ScrollDirectionRight,
ScrollDirectionLeft,
ScrollDirectionUp,
ScrollDirectionDown,
ScrollDirectionCrazy,
};