已解决:查看评论以了解问题所在
我正在 UIScrollView 上实现一个子类,它将是一个水平滚动的子视图/“单元格”行。基本上是一个水平滚动的“表格视图”元素。UIScrollView 内容视图中的每个子视图/“单元格”都附加了一个 UIGestureRecognizer ,因此当有人触摸其中一个时, UIGestureRecognizer 将触发。
问题是,当一个人滚动离开 contentView 原点时,即 UIScrollView 返回一个 x 不是 0 的 contentOffset,任何从右侧滚动的新子视图/“单元格”都不会触发 UIGestureRecognizer感动。所有的子视图都有它们的 UIGestureRecognizer。
例如,假设我要显示一行 80x80 图标,而我的 contentSize 是 1600,80,一行 20 个图标。UIScrollView 为 320,80,因此它将显示 4 个图标。最初的 4 个图标是可触摸的,并且 UIGestureRecognizer 会在每个图标上触发。用户向左滚动,即新图标从右侧进入。这些新图标(子视图)被创建并添加到我在 UIScrollView 中使用的 contentView 中,方法与原始 4 相同。但是不在原始边界内的新图标(子视图)不会触发。我实现了我自己的子视图队列/出队,类似于表视图所做的事情,如果我滚动到 #15 位置,
但是,如果用户然后滚动回到开头,即使这些单元格是新添加到 contentView 中的,只要它们的边界在 UIScrollView 的原始框架和我用来在滚动内聚合的 UIView contentView 内,它们也是可触摸的看法。所以它似乎取决于每个子视图的框架以及它是否位于滚动视图的框架内。
一切都显示得很好——因为它滚动了 contentOffset 更改,我删除并添加了子视图。只是附加到每个子视图的 UIGestureRecognizers 没有触发并且位置取决于在滚动视图开始滚动之前处于其原始边界内。
我整天都在摸头,昨天半天)并将其缩小到不依赖于其他东西的位置。
我会发布代码,但不确定要发布什么,因为有很多代码运行它。