问题描述:横向UIScrollView里面的子控件,我使用了UIPanGestureRecognizer来实现拖动,但是发现UIScrollView无法响应滚动事件,因为scroll里面布满了我放的控件,所以不能响应。如果先让scroll响应
[panGestureRecognizer requireGestureRecognizerToFail:sroll.panGestureRecognizer]//先处理scroll
发现,我添加的手势又不响应了,因为sroll滚动每次都成功。
解决办法:后来在 栈溢出 问答平台找到了一个没有采纳的答案解决了问题,使用手势代理,通过
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
来解决
这个方法是用来处理多手势共存的,返回NO则响应一个手势,返回YES为同时响应,我的处理方法是,判断当前gestureRecognizer是否是panGestureRecognizer,然后判断方向,如果为上下方向则返回NO,则scroll不响应,否则都响应,问题完美解决。
当然拖动手势没法直接获取方向需要通过
CGPoint translation = [(UIPanGestureRecognizer*)gestureRecognizer translationInView:self];
来获得,如果translation.y的绝对值大于translation.x的绝对值就可以看成是上下方向。