无法在一次移动中从UIScrollView过渡到UIPanGesture

时间:2013-07-16 09:09:01

标签: ios objective-c uiscrollview parallax uipangesturerecognizer

我想要实现的目标:http://youtu.be/SUWxVtpc0JA

我能取得的成就:http://youtu.be/b1xH6Xsvxcg

当我从文本页面更改为菜单时,我正在尝试使用Year Walk Companion应用程序执行的相同垂直视差滚动效果。

我已经能够在仅UIScrollViews水平移动的UIPanGestureRecognizer上执行此操作,方法是使用UIScrollView向上和向下移动(想象在嵌套数组之间滑动)。但是当我有一个垂直滚动的UIScrollView时,它会断开。

当我向下滚动UIPanGestureRecognizer时,它会按照您的预期移动,如果向上移动则相同。但是,当我希望UIScrollView进入并垂直移动UIScrollView本身而不是它的内容时,问题就开始了。到目前为止,我已经将gestureRecognizerShouldBegin子类化为对函数-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ UIPanGestureRecognizer* pan = (UIPanGestureRecognizer*)gestureRecognizer; CGPoint panGestureTranslation = [pan translationInView:self]; if (self.contentOffset.y == 0 && panGestureTranslation.y > 0 ) { return NO; } return YES; } 进行测试:

NO

当我的UIScrollView位于顶部时返回UIScrollView,并允许我的其他UIPanGesture在页面之间滚动视差以重新开始。

我的问题是,当我的gestureRecognizerShouldBegin滚动并到达顶部时,函数UIPanGestureRecognizer将不会被调用并强制我在允许UIScrollView视差滚动之前释放触摸。

问题:如何通过UIPanGestureRecognizer停止触摸手柄,让{{1}}触摸屏上升而不会从屏幕上松开手指? (比如在Year Walk Companion应用程序中)。

1 个答案:

答案 0 :(得分:0)

未调用

gestureRecognizerShouldBegin,因为尚未启动新的触摸“会话”。现有的还在进行中,手势表示它不想开始。

您可以创建自己的手势子类,该子类可以保持可用,并且仅在内容偏移量<1时开始。 0.或者您可以使用滚动视图委托方法作为输入,而不是使用手势。