我有两个视图控制器.视图控制器A具有UIScrollView并呈现视图控制器B.该演示是交互式的并由控制器控制scrollView.contentOffset.
我想整合一个交互式消除过渡:当平移时,ViewController B应该以交互方式被解雇.交互式dismiss转换还应控制ViewController的scrollView.
我的第一次尝试是使用a UIPanGestureRecognizer并scrollView.contentOffset根据平移距离进行设置.这是有效的,但是当平移手势结束时,必须将scrollView偏移设置为最终位置的动画.使用-[UIScrollView setContentOffset:animated:不是一个好的解决方案,因为它使用线性动画,不考虑当前的平移速度并且不会很好地减速.
所以我认为应该可以将我的平移手势识别器中的触摸事件提供到滚动视图中.这应该给我们所有漂亮的滚动视图动画行为.
我尝试覆盖-touchesBegan/Moved/Ended/Cancelled withEvent:我的UIPanGestureRecognizer子类中的方法,如下所示:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[scrollView touchesBegan:touches withEvent:event];
[scrollView.panGestureRecognizer touchesBegan:touches withEvent:event];
[super touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)
但显然有些东西阻止滚动视图进入tracking模式.(确实如此,dragging = YES但这就是它.)我验证了scrollView是userInteractionEnabled,而不是隐藏并添加到视图层次结构中.
那么我怎样才能将我的触摸事件转发给UIScrollView?