2013-09-23 90 views
5

如果我有一个带有子视图的scrollView,并且子视图有一个平移手势识别器,则scrollView的平移手势覆盖子视图的平移。我想要的是相反的,我认为,所以我拖动一个子视图,它将在滚动视图内平移,但如果我触摸另一个区域,滚动视图将平常平移。有没有简单的方法来设置?UIScrollView覆盖我的子视图的平移手势识别器

回答

12

这里对我来说是什么在起作用:

UIPanGestureRecognizer *subviewPanRecognizer = [[UIPanGestureRecognizer alloc] 
    initWithTarget:self action:@selector(panSubview:)]; 
[subview addGestureRecognizer:subviewPanRecognizer]; 

// play nice with subview's pan gesture 
[scrollView.panGestureRecognizer 
    requireGestureRecognizerToFail:subviewPanRecognizer]; 
+0

这似乎是默认行为(这是我在UIScrollView实践中观察与UIImageView子视图)。有人可以确认/体弱吗? – Norswap

+1

它不适用于我 –

+0

工程很漂亮,特别是在子视图上应用委托并实现'gestureRecognizerShouldBegin:'时。 –

0

覆盖下面这两个代表,

- (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; 

}

在这个委托作为你愿意,你可以做任何事情,因为它的名字gestureRecoginzer将需要由otherGestureRecognizer失败,所有你需要做的是判断什么这两种手势中的一种并返回YES或NO。

相关问题