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

Posted

技术标签:

【中文标题】iOS:通过scrollview适当传递正确的事件【英文标题】:iOS: Appropriately pass the right events through scrollview 【发布时间】:2013-07-23 12:27:36 【问题描述】:

所以我已经为这个问题苦苦挣扎了很长时间,我相信我已经尝试了所有可用的 *** 解决方案,但我仍然无法做到这一点。

在我的社交网络应用程序的所有其他视图中都有一个“幕布视图”

这是窗帘处于默认模式时的样子

这是窗帘处于“向下”模式时的样子

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

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

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

我的问题。当滚动视图处于默认模式时,我无法弄清楚如何使我的绿色按钮“跟随,每个人,附近”可点击/可触摸。显然,滚动视图的内容大小与按钮重叠,但我该如何避免呢?

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

我已经使用包含滚动视图的自定义视图控制器实现了窗帘视图。 然后这个视图被添加到根视图中。

【问题讨论】:

你试过[self.view bringSubviewToFront:yourButton] 您确定需要滚动视图吗?简单的滑动手势不起作用? 是的,我需要滚动视图,当然可以使用手势识别器,但我希望它可以滚动。谢谢。 @codeInOrange 子视图(按钮)与窗帘不在同一视图上 所以您的滚动视图位于所有其他视图之上? 【参考方案1】:

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

scrollView.hidden = YES;

这将防止UIScrollView 阻止对其下方按钮的触摸。

见Apple's UIView doco:

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

然后在拉下窗帘之前将 hidden 设置为 NO。

编辑:

要回答您评论中的问题:

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

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

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

以下是一些我觉得很有帮助的链接:

PullableView for ios - 这是一个很好且简单的示例,说明如何实现下拉/上/跨视图。我建议从github 下载代码并查看一下。 Implementing an iOS notification center pulldown Touch and pull down a view - 这是一个与你类似的 SO 问题。尤其是this answer,我很确定它会像你一样使用UIScrollView。 Drag Down UIView in iOS 5 - 这个 SO 问题也有一些很好的答案。

希望这会有所帮助!

【讨论】:

谢谢, 1. 我怎么知道我的滚动视图是否在默认位置,没有触发事件? 2. 如果我把它设置为隐藏,窗帘的图像会不会消失? 3.滚动视图应该用手指“向下拖动”(当然)。所以它需要随时触发事件。 有点晚了,但我选择了第二个点答案 =)

以上是关于iOS:通过scrollview适当传递正确的事件的主要内容,如果未能解决你的问题,请参考以下文章

如何将触摸事件从 ScrollView 子视图传递到它的父视图

在 iOS 8.1 之后,在所有设备上,当点击 alertview 取消按钮时,ScrollView 向上并且不滚动

ios的scrollview嵌套webview,解决事件冲突

iOS实现ScrollView中子控件view的触摸事件响应

ios监听ScrollView/TableView滚动的正确姿势

带有scrollView的iOS页面随机无法正确加载contentView