Nadeal

您现在的位置是:首页>所属分类

所属分类

iOS中UIPanGestureRecognizer与UITableViewCell的手势冲突

Nadeal2022年5月27日 15:21个人博客703
原本也没什么好写的。手势冲突,也是少见的一种情况,只有当绘制复杂的视图时,造成一些手势冲突。刚好,最近因为在UITableViewCell中,绘制了太多的东西,也造成一点点冲突。决定也写一下。

当我们在UITableViewCell中添加手势代码时,

UIPanGestureRecognizer *pan =[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(doPan:)];
pan.delegate = self;// 注意这里我们使用了代理
[self addGestureRecognizer:pan];

那么,在@implementation中,我们也添加了代码,

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    // note: we might be called from an internal UITableViewCell long press gesture

    if([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]){

        UIPanGestureRecognizer *panGestureRecognizer =(UIPanGestureRecognizer*)gestureRecognizer;

        UIView *cell =[panGestureRecognizer view];

        CGPoint translation =[panGestureRecognizer translationInView:[cell superview]];

        // Check for horizontal gesture

        if(fabs(translation.x)> fabs(translation.y)) {

            return YES;

        }

    }

    return NO;

}

这样我们就可以避免纵向视图滚动UITableView时,造成冲突,无法让UITableView顺利的纵向滚动。