gpt4 book ai didi

uiscrollview - 使 UIGestureRecognizer 响应已经在进行中并被另一个识别器识别的手势

转载 作者:行者123 更新时间:2023-12-04 05:00:12 25 4
gpt4 key购买 nike

所以这是交易:

  • 我有一个带有集合 View ( subview )的 View ,其内容是
    高于其边界的高度。所以集合 View 将允许
    垂直滚动以查看其所有项目。
  • 此外,这个集合 View 位于 aprox。其高度超过其父 View (vc 主 View )底部的一半。也就是说,一半的集合 View 被“隐藏”在屏幕底部之后。
  • 我正在使用 UIKit Dynamics 来允许上下拖动集合 View 。它的静止位置如 2 中所述。它的“展开”位置一直到 vc 的导航栏。

  • 为了触发动态,我有一个 UIPanGestureRecognizer 附加到主 vc View (集合 View 的 super View ),如果它检测到在集合 View 所在的位置开始拖动,它会启动动态过程以将其向上或向下拉。

    然而,我试图实现的行为是:
  • 如果集合 View 被折叠(底部),拖动应该通过动态将其拉起来,但不允许集合 View 的平移识别器同时滚动。
  • 一旦我在向上拉集合 View 方面达到我的目标高度,集合 View 也应该开始响应我的手势,在集合 View 内沿垂直方向滚动。对集合 View 的这种切换也需要连续响应手势。也就是说,如果我根据它在 super View 中的位置设置集合 View 的 scrollEnabled 这不起作用:手势已经在处理中,所以集合 View 不会开始滚动,直到我结束当前手势并开始一个新的手势。

  • 那么有没有办法让集合 View 中的手势识别器知道一个手势正在进行中,并让它开始识别该手势,即使它已经被 super View 识别器处理了?

    更新:

    在这一点上,我什至会选择一个带有两个嵌套ScrollView的解决方案。
    如果有人感兴趣,我做了一个尝试的小项目。还远不能接受。
    以下是嵌套ScrollView方法的主要问题:
  • 默认情况下,在 scrollEnabled 设置为 YES 时ScrollView(和子类)不响应正在进行的手势的问题成立,无论处理 2 个ScrollView或手势识别器和ScrollView。
  • 我通过对有问题的类(在我的示例中,一个表 View 和一个ScrollView)进行子类化并将 scrollEnabled 属性与 -setContentOffset: 一起操作并将 View 的识别器设置为同时识别来解决了这个问题。在这一点上,我终于可以任意设置ScrollView(或与此相关的子类)scrollEnabled 并让它们响应正在进行的手势。

  • 但后来我面临其他一些问题:
  • 取决于在我将 View 的 scrollEnabled 设置为 YES 之前手势是否已经持续一段时间, View 开始获取消息以将其内容偏移设置为不正确的值。也就是说,如果在父ScrollView达到其最大内容偏移之前禁用 tableview 滚动,则在手势仍在进行中时打开 tableview 以响应手势会导致它尝试滚动到父 View 的 contentOffset 而不是从 0 开始的下一步值(因为它的内容偏移量在此之前实际上为 0)。
  • 根据手势是连续向上平移超过父ScrollView的最大偏移然后再次向下,还是两次离散滑动(一次向上,一次向下),我也会得到不同的偏移结果。
  • 当将 tableview 下拉到其内容偏移量应 <= 0 并在父 View 中再次启用滚动时,tableview 并不总是最终与其内容偏移量 0 完全对齐,即使我舍入该值到 0.

  • sample project

    最佳答案

    您需要实现 -gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:UIPanGestureRecognizerdelegate 方法以在传递的手势识别器是您的 YESUICollectionView 时返回 panGestureRecognizer

    然后,最初将您的 UICollectionViewscrollEnabled 设置为 NO 。一旦您的 UICollectionView 处于其目标高度(根据您的 UIPanGestureRecognizer 带来的运动),将您的 UICollectionViewscrollEnabled 设置为 YES 并开始忽略来自您自己的 UIPanGestureRecognizer 的事件。

    或者,您可以将 UICollectionView 放入父 UIScrollView 以获得类似的结果。

    关于uiscrollview - 使 UIGestureRecognizer 响应已经在进行中并被另一个识别器识别的手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19968206/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com