3

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

我能做到的:http: //youtu.be/b1xH6Xsvxcg

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

通过使用 a上下移动(想象在嵌套数组之间滑动),我已经能够在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位于顶部时返回,并允许我的另一个 UIPanGesture 重新开始页面之间的视差滚动。

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

问题:如何停止触摸手柄UIScrollView并让UIPanGestureRecognizer触摸上升而不将手指从屏幕上松开?(就像在 Year Walk Companion 应用程序中一样)。

4

1 回答 1

0

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

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

于 2013-07-16T09:18:17.963 回答