Das Bestimmen der Richtung ist ziemlich einfach, aber denken Sie daran, dass sich die Richtung im Verlauf einer Geste mehrmals ändern kann. Wenn Sie beispielsweise eine Bildlaufansicht mit aktiviertem Paging haben und der Benutzer wischt, um zur nächsten Seite zu gelangen, kann die Anfangsrichtung nach rechts gerichtet sein. Wenn Sie jedoch den Sprung aktiviert haben, geht sie kurzzeitig in keine Richtung und dann kurz nach links gehen.
Um die Richtung zu bestimmen, müssen Sie den UIScrollView scrollViewDidScroll
Delegaten verwenden. In diesem Beispiel habe ich eine Variable mit dem Namen erstellt, mit lastContentOffset
der ich den aktuellen Inhaltsoffset mit dem vorherigen vergleiche. Wenn es größer ist, scrollt die scrollView nach rechts. Wenn es weniger ist, scrollt die scrollView nach links:
// 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.
}
Ich benutze die folgende Aufzählung, um die Richtung zu definieren. Das Setzen des ersten Werts auf ScrollDirectionNone hat den zusätzlichen Vorteil, dass diese Richtung beim Initialisieren von Variablen als Standard festgelegt wird:
typedef NS_ENUM(NSInteger, ScrollDirection) {
ScrollDirectionNone,
ScrollDirectionRight,
ScrollDirectionLeft,
ScrollDirectionUp,
ScrollDirectionDown,
ScrollDirectionCrazy,
};