Determinar a direção é bastante simples, mas lembre-se de que a direção pode mudar várias vezes ao longo de um gesto. Por exemplo, se você tiver uma visualização de rolagem com a paginação ativada e o usuário deslizar para a próxima página, a direção inicial poderá ser para a direita, mas se você tiver o salto ativado, ela não seguirá brevemente em nenhuma direção e depois, brevemente, indo para a esquerda.
Para determinar a direção, você precisará usar o UIScrollView scrollViewDidScroll
delegado. Nesta amostra, criei uma variável denominada lastContentOffset
que eu uso para comparar o deslocamento do conteúdo atual com o anterior. Se for maior, o scrollView está rolando para a direita. Se for menor, o scrollView está rolando para a esquerda:
// 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.
}
Estou usando a enumeração a seguir para definir a direção. Definir o primeiro valor como ScrollDirectionNone tem o benefício adicional de tornar essa direção o padrão ao inicializar variáveis:
typedef NS_ENUM(NSInteger, ScrollDirection) {
ScrollDirectionNone,
ScrollDirectionRight,
ScrollDirectionLeft,
ScrollDirectionUp,
ScrollDirectionDown,
ScrollDirectionCrazy,
};