我有两个视图控制器。视图控制器A拥有一个UIScrollView
并呈现视图控制器B。这个显示是交互式的,由scrollView.contentOffset
来控制。
我想集成一个交互式的解除过渡效果:向上滑动时,应该交互地解除ViewController B。交互式解除过渡还应该控制ViewController A中的scrollView。
我的第一次尝试是使用UIPanGestureRecognizer
,根据平移距离设置scrollView.contentOffset
。这个方法可以运行,但是当平移手势结束时,scrollView偏移必须被动画到最终位置。使用-[UIScrollView setContentOffset:animated:]
不是一个好的解决方案,因为它使用线性动画,不考虑当前的平移速度,并且不会漂亮地减速。
所以我认为应该可以将我的平移手势识别器中的触摸事件传递给滚动视图。这应该会给我们所有漂亮的滚动视图动画效果。
我尝试重写UIPanGestureRecognizer
子类中的-touchesBegan/Moved/Ended/Cancelled withEvent:
方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[scrollView touchesBegan:touches withEvent:event];
[scrollView.panGestureRecognizer touchesBegan:touches withEvent:event];
[super touchesBegan:touches withEvent:event];
}
但显然有些东西阻止了滚动视图进入跟踪
模式(它确实会进入拖动= YES
,但仅限于此)。我验证了scrollView的userInteractionEnabled
属性已启用,而且没有隐藏并添加到视图层次结构中。
那么我该如何将我的触摸事件转发给UIScrollView
?
contentOffset
而不带有动画效果? - coverbackdismissViewControllerAnimated:completion:
,该方法调用-startInteractiveTransition:
,并将VC A滚动视图添加回容器。从此时开始,我想将触摸事件转发到滚动视图。 - Ortwin Gentz