iOS:通过scrollview正确传递正确的事件

时间:2013-07-23 12:27:37

标签: ios cocoa-touch uiscrollview hittest

所以我一直在努力解决这个问题已经很久了,我相信我已经尝试了所有可用的StackOverflow解决方案,但我仍然无法做到这一点。

我的社交网络应用程序中的每个其他视图都有一个“Curtain View”

当窗帘处于默认模式时,它就是这样 This is how it looks when the curtain is in default-mode

当窗帘处于“向下” - 模式时,它就是这样的样子 This is how it looks when the curtain is in "down"-mode

窗帘是包含在滚动视图中的视图。

为了能够向下拉窗帘,我不得不将内容大小设置为覆盖绿色按钮,这可以在图像中看到。

内容大小类似于下面图片中的黑色描边区域。

enter image description here

我的问题。当scrollview处于默认模式时,我无法弄清楚如何制作我的绿色按钮,“关注,每个人,附近”可点击/可触摸。滚动视图的内容大小显然是在按钮上,但我怎么能避免呢?

我已尝试使用 hitTest 覆盖,尝试通过事件链传递触摸事件
其他类似的解决方案但没有运气我不能让这个工作。

我使用包含scrollview的自定义视图控制器实现了窗帘视图。 然后将此视图添加到根视图中。

1 个答案:

答案 0 :(得分:1)

UIScrollView处于默认位置时,您应隐藏它:

scrollView.hidden = YES;

这会阻止UIScrollView阻止其下方按钮的触摸。

请参阅Apple's UIView doco

  

隐藏视图会从其窗口中消失,并且不会接收输入事件。但它仍保留在超级视图的子视图列表中,并像往常一样参与自动调整。

然后在拖下窗帘之前将隐藏设置为NO。

修改

回答评论中的问题:

  1. 我如何知道我的滚动视图是否处于默认位置,是否没有触发事件? 通过检查滚动视图上的contentOffset属性,您应该能够确定滚动视图是处于默认(隐藏)位置还是处于向下位置(显示)。

  2. 如果我将它设置为隐藏,窗帘的图像是否会消失?是的,它会。如果您希望视图仍然部分显示在顶部而不是完全消失,则需要采用不同的方法(请参阅下面的一些建议)。

  3. 滚动视图应该用手指“拖动”(当然)。因此,它需要始终触发事件。您可以在主视图上检测触摸/平移手势,并使滚动视图根据该手势向下/向上移动。手势实际上不需要在scrollview内部开始。

  4. 以下是我发现有用的一些链接:

    希望这有帮助!