使用UIPanGestureRecognizer通过UIView发送触摸信息

时间:2018-12-12 13:24:40

标签: ios objective-c

基本上,我想在表格视图上方的UIView中向上/向下检测平移手势,同时正常滚动表格视图。

我已经尝试实现pointInside和gestureRecognizer:shouldReceiveTouch :,但是它们在使用时都绕过了手势识别器。

是否可以将相同的触摸发送到两个视图或在处理后通过触摸发送?还是一种不拦截手势就可以追踪手势的一般方法?

2 个答案:

答案 0 :(得分:0)

由于UITableView是UIScrollView的后继对象,因此对自己的内部手势有反应。我认为在这种情况下无法实现上/下手势。

答案 1 :(得分:0)

将自己的UIPanGestureRecognizer添加到Tableview中。

通过返回YES使它们并存 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer应该与GestureRecognizer同时识别:(UIGestureRecognizer *)otherGestureRecognizer

//setup
                        UITableView* tableview=[[UITableView alloc] initWithFrame:CGRectMake(0, 0, 400, 500)];
                        tableview.dataSource=self;
                        [self.view addSubview:tableview];

                        UIPanGestureRecognizer* pangr=[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(someMethod:)];
                        pangr.delegate=self;
                        [tableview addGestureRecognizer:pangr];

            .
            .
            .

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

                    return YES;
                }

 -(void)someMethod:(UIPanGestureRecognizer*)sender{
            CGFloat velocityX = ([sender velocityInView:self.view].x);
            CGFloat velocityY = ([sender velocityInView:self.view].y);
            NSLog(@"pannig %f %f", velocityX, velocityY);
        }

在我的测试中工作正常。 如果确实需要tableview上方的UIView,则可以在那里进行设置并设置userInteractionEnabled=NO