如何解决tableView与其subview的手势冲突问题

 我来答
gcaijiuh90
2016-11-21 · TA获得超过248个赞
知道小有建树答主
回答量:337
采纳率:100%
帮助的人:243万
展开全部
然后我希望每个cell都可以在手指左右滑的时候,立方体能够旋转!你会想到加一个手势不就行了么,是的,我也是这么做的:
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
pan.delegate = self;
[self.contentView addGestureRecognizer:pan];

- (void)handlePan:(UIPanGestureRecognizer *)pan
{
CGPoint point = [pan translationInView:self];
switch (pan.state)
{
case UIGestureRecognizerStateBegan:
self.prePoint = point;
break;

case UIGestureRecognizerStateChanged:
[self changeCubeWithPoint:point prePoint:self.prePoint screenSize:self.screenSize];
self.prePoint = point;
break;

default:
break;
}
}

但是你很快会发现,你的cell中的立方体确实在转动,但是不能上下翻页了。很显然是UIPanGestureRecognizer和scrollView的滑动手势冲突了,解决办法是设置UIPanGestureRecognizer的代理UIGestureRecognizerDelegate,并实现代理方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}

-(BOOL)gestureRecognizer(UIGestureRecognizer)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer )otherGestureRecognizer方法的含义是该手势能否与其它手势一起被识别,如果按照上面这样写,你会发现确实既可以滑动又可以转立方体了,但是滑动立方体的时候,你会很容易就误翻页了,tableView太不听话了。真正希望的效果是在横向滑动的时候,立方体转动但是tableView别乱动,快速上下滑的时候tableView再翻页!把上面的方法改成下面的:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
{
switch (gestureRecognizer.state)
{
case UIGestureRecognizerStateBegan:
{
UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;
CGPoint velocity = [pan velocityInView:self];
CGFloat Vx = fabs(velocity.x);
CGFloat Vy = fabs(velocity.y);

return !(Vx > Vy - 50.0 || Vy < 400.0 || Vx > 500.0);
}
break;

case UIGestureRecognizerStateChanged:
return NO;
break;

default:
break;
}
}

return YES;
}
意思就是手势开始的时候,如果发现横向滑动速度Vx比较大的时候,不要去滑动tableView了,如果UIPanGestureRecognizer手势开始了(UIGestureRecognizerStateChanged),也不要去滑动了,只有当开始的时候上下滑速度Vy比较大的时候,才去滑动tableView,达到了我们要的效果
资料由:成都点点通软件开发公司提供!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式