uiscrollviewdelegate - GestureRecognizers not receiving touch events while UIScrollView is decelerating -
i have horizontally scrolling uicollectionview populated vertically scrolling uitableviews (both beingness subclasses of uiscrollview). when scroll gesture begins scrolling in either direction, no other gesture recognizers recognized until done decelerating.
so if scroll horizontally 1 tableview next, seek scroll tableview vertically before deceleration finished, go on scrolling horizontally. frustrating.
you can 2 gesture recognizers work simultaneously implementing uigesturerecognizerdelegate method:
- (bool)gesturerecognizer:(uigesturerecognizer *)gesturerecognizer shouldrecognizesimultaneouslywithgesturerecognizer:(uigesturerecognizer *)othergesturerecognizer{ homecoming yes; } however, since delegate built in gesture recognizers uiscrollview must uiscrollview itself, must subclass uiscrollview (or uitableview, or uicollectionview) implement delegate method.
kinda defeats purpose of delegation.
anyways, both uiscrollviews recognizing gestures simultaneously, need way distinguish horizontal vertical scroll gestures , create sure appropriate scroll view handles appropriate gesture.
a quick solution create vertical swipe gesture recognizer , require fail horizontal collection view's built in gesture recognizers recognize.
uiswipegesturerecognizer* verticalswipe = [[uiswipegesturerecognizer alloc] init]; verticalswipe.direction = uiswipegesturerecognizerdirectiondown | uiswipegesturerecognizerdirectionup; verticalswipe.delegate = self; (uigesturerecognizer *gesture in self.collectionview.gesturerecognizers){ [gesture requiregesturerecognizertofail:verticalswipe]; } [self.collectionview addgesturerecognizer:verticalswipe]; then same thing vertical tableview, adding horizontal swipe gesture , requiring fail tableview's built in recognizers kick in.
uiswipegesturerecognizer* horizontalswipe = [[uiswipegesturerecognizer alloc] init]; horizontalswipe.direction = uiswipegesturerecognizerdirectionleft | uiswipegesturerecognizerdirectionright; horizontalswipe.delegate = self; (uigesturerecognizer *gesture in tableview.gesturerecognizers){ [gesture requiregesturerecognizertofail:horizontalswipe]; } [tableview addgesturerecognizer:horizontalswipe]; adding:
- (bool)gesturerecognizer:(uigesturerecognizer *)gesturerecognizer shouldrecognizesimultaneouslywithgesturerecognizer:(uigesturerecognizer *)othergesturerecognizer{ homecoming yes; } to both collectionview , tableview helped farther refine gesture behavior.
uiscrollview uiscrollviewdelegate
No comments:
Post a Comment