我想要实现的目标:http://youtu.be/SUWxVtpc0JA
我能实现的目标:http://youtu.be/b1xH6Xsvxcg
我正在尝试实现与 Year Walk Companion 应用程序相同的垂直视差滚动效果,当您从文本页面切换到菜单时。
通过使用 UIPanGestureRecognizer
上下移动,我已经能够在仅水平移动的 UIScrollViews
上实现这种效果(想象一下在嵌套数组之间滑动) .但是,当我有一个垂直滚动的 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;
}
当我的 UIScrollView
位于顶部时,它返回 NO
,并允许我的其他 UIPanGesture 重新开始页面之间的视差滚动。
我的问题是,当我的 UIScrollView
滚动并到达顶部时,函数 gestureRecognizerShouldBegin
将不会被调用并强制我在允许 UIPanGestureRecognizer
视差滚动。
问题:如何停止 UIScrollView
的触摸句柄,让 UIPanGestureRecognizer
在手指不离开屏幕的情况下向上移动? (就像在 Year Walk Companion 应用程序中一样)。
最佳答案
gestureRecognizerShouldBegin
未被调用,因为新的触摸“ session ”尚未开始。现有的还在进行中,手势表示不想开始。
您可以创建自己的手势子类,它保持可能并且仅在内容偏移量 < 0 时才启动。或者您可以使用 ScrollView 委托(delegate)方法作为您的输入,而根本不使用手势。
关于ios - 无法一次从 UIScrollView 过渡到 UIPanGesture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17672391/