I’m trying to add a UIPanGestureController to my UITableView so I can detect whether the user is manually panning or they just gave an initial kick and watch the view scroll by itself. The reason is that I want to snap to a cell as soon as the scrolling slows down (imagine a wheel of fortune). Of course I don’t want to snap when the user is panning manually.
However, I can either use the gesture controller (and set my “is scrolling manually” variables accordingly”) OR scroll the view.
Using TouchBegin events instead of the gesture recognizer introduces new problems, so that’s not really an option.
First I changed the table view to include the UIGestureRecognizerDelegate.
After initializing the view, I then do…
panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panTableView:)];
[panGestureRecognizer setDelegate:self];
[self.view addGestureRecognizer:panGestureRecognizer];
I implement the Begin function, to set a BOOL:
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer
{
isPanning = YES;
return NO;
}
Always returning NO should make sure that the gesture recognizer is never active, since I want (and need) to use the table view’s own scroll methods.
Problem: my action “panTableView” is never called.
If I don’t set the delegate, the action is called, but I can’t scroll, since the gesture recognizer catches all my touches.
I already looked into the targets. After setting the delegate, the gesture recognizer’s view and delegate pointers are the same as self.view, the action still targets self with the right selector.
try
and implement this