Detect horizontal panning in UITableView

前端 未结 5 2146
日久生厌
日久生厌 2021-01-31 16:42

I\'m using a UIPanGestureRecognizer to recognize horizontal sliding in a UITableView (on a cell to be precise, though it is added to the table itself). However, this gesture rec

5条回答
  •  轮回少年
    2021-01-31 17:04

    I had the same issue and came up with a solution that works with the UIPanGestureRecognizer.

    In contrast to Erik I've added the UIPanGestureRecognizer to the cell directly, as I need just one particular cell at once to support the pan. But I guess this should work for Erik's case as well.

    Here's the code.

    - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer
    {
        UIView *cell = [gestureRecognizer view];
        CGPoint translation = [gestureRecognizer translationInView:[cell superview]];
    
        // Check for horizontal gesture
        if (fabsf(translation.x) > fabsf(translation.y))
        {
            return YES;
        }
    
        return NO;
    }
    

    The calculation for the horizontal gesture is copied form Erik's code – I've tested this with iOS 4.3.

    Edit: I've found out that this implementation prevents the "swipe-to-delete" gesture. To regain that behavior I've added check for the velocity of the gesture to the if-statement above.

    if ([gestureRecognizer velocityInView:cell].x < 600 && sqrt(translate...
    

    After playing a bit on my device I came up with a velocity of 500 to 600 which offers in my opinion the best user experience for the transition between the pan and the swipe-to-delete gesture.

提交回复
热议问题