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

Posted

技术标签:

【中文标题】如何使用 UISwipeGestureRecognizer 在 UITableViewCell 中检测滑动事件【英文标题】:How to detect a swipe event in a UITableViewCell with a UISwipeGestureRecognizer 【发布时间】:2014-08-11 23:02:20 【问题描述】:

我有一个 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。我的代码有什么问题?

【问题讨论】:

detecting finger up/down UITapGestureRecognizer的可能重复 【参考方案1】:

来自UIGestureRecognizer Class Reference docs:

离散手势的识别器从 UIGestureRecognizerStatePossible 转换为 UIGestureRecognizerStateFailed 或 UIGestureRecognizerStateRecognized。

手势识别器识别离散事件,例如点击或滑动,但不报告手势内的变化。换句话说,离散手势不会通过 Began 和 Changed 状态进行转换,它们不会失败或被取消。

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

【讨论】:

我会试一试的。有没有其他解决方案来接收“横向细胞偏移”?有什么方法可以覆盖吗?

以上是关于如何使用 UISwipeGestureRecognizer 在 UITableViewCell 中检测滑动事件的主要内容,如果未能解决你的问题,请参考以下文章

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?