La détermination de la direction est assez simple, mais gardez à l'esprit que le sens peut changer plusieurs fois au cours d'un mouvement. Par exemple, si vous avez un scrollview avec pagination activé et l'utilisateur glisse le doigt pour aller à la page suivante, la direction initiale pourrait être à droite, mais si vous avez rebondir allumé, il sera brièvement aller dans aucun sens du tout, et ensuite brièvement aller vers la gauche.
Pour déterminer la direction, vous aurez besoin d'utiliser l' UIScrollView scrollViewDidScroll
délégué. Dans cet exemple, j'ai créé une variable nommée lastContentOffset
que j'utilise pour comparer le contenu actuel de décalage avec la précédente. Si il est plus grand, alors la scrollView est de défilement à droite. Si c'est moins la scrollView est de défilement à gauche:
//somewhere in the header
@property (nonatomic, assign) CGFloat lastContentOffset
//
- (void)scrollViewDidScroll:(UIScrollView *)sender
{
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.
}
Je suis l'aide de l'enum ci-dessous pour définir la direction. Le réglage de la première valeur à ScrollDirectionNone a l'avantage de faire en sorte que l'orientation par défaut lors de l'initialisation des variables:
typedef enum ScrollDirection {
ScrollDirectionNone,
ScrollDirectionRight,
ScrollDirectionLeft,
ScrollDirectionUp,
ScrollDirectionDown,
ScrollDirectionCrazy,
} ScrollDirection;