ios - 无法一次从 UIScrollView 过渡到 UIPanGesture

标签 ios objective-c uiscrollview parallax uipangesturerecognizer

我想要实现的目标: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/

相关文章:

iphone - OpenGL ES presentRenderBuffer 持续时间取决于 frameInterval 值

ios - 共享扩展子查询以限制项目类型

ios - 如何更新 iOS PhotoScroller 示例代码

ios - 使多个 ScrollView 响应一个取消滚动行为

iOS - 在 UIWebView 中加载 PDF,然后使用 UIDocumentInteractionController 保存到 iBooks

ios - 是否可以从 UIImagePickerController 拍摄多张照片?

ios - 为什么改变scrollView的contentsize值不会影响结果

ios - 如何在 Swift 5 中添加 ScrollView ?

ios - ScrollView 手势识别器吃掉所有的触摸事件

javascript - UIWebView - html 输入按钮 onmousedown 的 css 样式