【发布时间】:2013-09-28 05:33:39
【问题描述】:
如果我有一个带有子视图的滚动视图并且子视图有一个平移手势识别器,那么滚动视图的平移手势覆盖就是子视图的平移。我想我想要的是相反的,所以我拖动一个子视图它将在滚动视图中平移,但是如果我触摸另一个区域,滚动视图将正常平移。有没有简单的方法来设置它?
【问题讨论】:
标签: ios cocoa-touch uiscrollview uigesturerecognizer
如果我有一个带有子视图的滚动视图并且子视图有一个平移手势识别器,那么滚动视图的平移手势覆盖就是子视图的平移。我想我想要的是相反的,所以我拖动一个子视图它将在滚动视图中平移,但是如果我触摸另一个区域,滚动视图将正常平移。有没有简单的方法来设置它?
【问题讨论】:
标签: ios cocoa-touch uiscrollview uigesturerecognizer
如果您不想滚动触摸子视图,请将UIScrollView 的canCancelContentTouches 属性设置为false。
【讨论】:
覆盖下面这两个委托,
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
这将允许您识别这两种手势,默认返回是NO,所以我们需要覆盖它并返回YES。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
return NO;
}else{
return YES;
}
}
return YES;
}
在这个委托中你可以做任何你想做的事情,因为它的名字 gestureRecognizer 将被 otherGestureRecognizer 要求失败,你需要做的就是判断这两个手势是什么,返回YES或NO。
【讨论】:
这对我有用:
UIPanGestureRecognizer *subviewPanRecognizer = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(panSubview:)];
[subview addGestureRecognizer:subviewPanRecognizer];
// play nice with subview's pan gesture
[scrollView.panGestureRecognizer
requireGestureRecognizerToFail:subviewPanRecognizer];
【讨论】:
gestureRecognizerShouldBegin:时。