La détermination de la direction est assez simple, mais gardez à l'esprit que la direction peut changer plusieurs fois au cours d'un geste. Par exemple, si vous avez une vue de défilement avec la pagination activée et que l'utilisateur glisse pour aller à la page suivante, la direction initiale peut être vers la droite, mais si vous avez activé le rebond, il n'ira brièvement dans aucune direction du tout et puis aller brièvement vers la gauche.
Pour déterminer la direction, vous devrez utiliser le UIScrollView scrollViewDidScroll
délégué. Dans cet exemple, j'ai créé une variable nommée lastContentOffset
que j'utilise pour comparer le décalage de contenu actuel avec le précédent. S'il est supérieur, le scrollView défile vers la droite. S'il est inférieur, le scrollView défile vers la gauche:
@property (nonatomic, assign) CGFloat lastContentOffset;
- (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;
}
J'utilise l'énumération suivante pour définir la direction. La définition de la première valeur sur ScrollDirectionNone présente l'avantage supplémentaire de faire de cette direction la valeur par défaut lors de l'initialisation des variables:
typedef NS_ENUM(NSInteger, ScrollDirection) {
ScrollDirectionNone,
ScrollDirectionRight,
ScrollDirectionLeft,
ScrollDirectionUp,
ScrollDirectionDown,
ScrollDirectionCrazy,
};