代码之家  ›  专栏  ›  技术社区  ›  Morpheus78

如何使用UISwipeGestureRecognizer在UITableViewCell中检测滑动事件

  •  0
  • Morpheus78  · 技术社区  · 12 年前

    我有一个UITableViewCell类,我想在其中检测滑动事件(删除),以便隐藏在 drawRect

    首先,我添加了 UISwipeGestureRecognice 至电池:

    // Init swipe gesture recognizer
    self.swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeCell:)];
    self.swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
    self.swipeRecognizer.delegate = self;
    [self.contentView addGestureRecognizer:self.swipeRecognizer];
    

    然后我实现了一种方法来对滑动事件做出反应:

    - (void)swipeCell:(UISwipeGestureRecognizer *)recognizer
    {
        switch (recognizer.state) {
            case UIGestureRecognizerStateBegan:
                self.swipeStartPoint = [recognizer locationInView:self.backgroundView];
                BaseLogDebug(INFO, @"Swipe Began at %@", NSStringFromCGPoint(self.swipeStartPoint));
                break;
            case UIGestureRecognizerStateChanged: {
                CGPoint currentPoint = [recognizer locationInView:self.backgroundView];
                CGFloat deltaX = currentPoint.x - self.swipeStartPoint.x;
                BaseLogDebug(INFO, @"Swipe Moved %f", deltaX);
            }
                break;
            case UIGestureRecognizerStateEnded:
                BaseLogDebug(INFO, @"Swipe Ended");
                break;
            case UIGestureRecognizerStateCancelled:
                BaseLogDebug(INFO, @"Swipe Cancelled");
                break;
            default:
                break;
        }
    }
    

    为了允许同时进行手势识别,我实现了以下方法:

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
     shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
        return YES;
    }
    

    手势识别的唯一状态是 UIGestureRecognizerStateEnded 。我的代码有什么问题?

    1 回复  |  直到 12 年前
        1
  •  1
  •   Lyndsey Scott    12 年前

    从 UIGestureRecognizer Class Reference docs :

    离散手势识别器从UIGestureRecognizerStatePossible转换为UIGesture RecognizerState Failed或UIGestutureRecognizerstateRecognited。

    和

    手势识别器识别离散事件,如轻击或滑动,但不报告手势内的变化。换句话说,离散手势不会在“开始”和“改变”状态之间转换,它们不会失败或被取消。

    UISwipeGestureRecognizer 是一个离散的手势。如果您想要连续(但类似)的手势,请使用 UIPanGestureRecognizer 相反

    推荐文章