我有两个嵌套的UIScrollViews:父视图被限制为水平分页,子视图被限制为垂直滚动。内容是一个大视图,可以自由拖动,但会捕捉到三个水平部分之一。嵌套滚动视图的默认行为是一次只允许在一个方向上滚动,但我想允许同时在两个方向上拖动,以保持操纵单个大视图的感觉。
我的解决方案涉及隔离垂直滚动视图的手势,并将其代理设置为我的视图控制器:
for (UIGestureRecognizer *gesture in scrollView.gestureRecognizers)
if ([gesture isKindOfClass:[UIPanGestureRecognizer class]])
gesture.delegate = self;
然后,我实现了委托方法,使分页视图的手势能够与滚动视图的平移手势同时识别:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (gestureRecognizer.view == scrollView && otherGestureRecognizer.view == pageView)
return YES; // allow simultaneous scrolling of pageView and scrollView
return NO;
}
这个解决方案大部分情况下是有效的,但当我拖动视图时,特别是用鼠标快速移动或将其拖动超出视图范围时,它偶尔会出现故障。具体来说,其中一个滚动视图会暂时跳回到起始位置,就好像该手势已被取消一样,但如果我继续滚动,它会再次跳回。
我想知道的是是否有更简单或更可靠的方法来实现这样的滚动,或者是否有任何可以消除故障行为的方法。