检测UIScrollView下的触摸

时间:2015-11-05 19:28:33

标签: ios objective-c uitableview uiscrollview

我构建了一个包含mapView(Google地图),tableView和UIScrollView的项目。 tableView位于底部,当应用程序启动时,您会看到它的一小部分,其中大部分都在屏幕外(在底部)。当用户滚动时,tableView被显示并从底部向上,直到它覆盖所有屏幕。这一切都有效,但我有一个小问题:我希望用户能够触摸地图(缩放,移动等),但UIScrollView位于地图的顶部,当时用户尝试与地图交互,scrollView检测到滚动并且地图没有获得触摸事件。有UIScrollView没有办法检测到地图区域的触摸吗? scrollView应覆盖tableView检测的所有屏幕(或者可能没有,还有另一种方式?)我不希望地图成为{{1}的子类因为当用户滚动时它会与表格一致(我希望scrollView在地图上而不是在地图上)。 谢谢!

1 个答案:

答案 0 :(得分:0)

取消我的评论。您需要在滚动视图上将顶部空间设置为superview约束。为约束创建一个IBOutlet,为约束的值创建一个浮点变量,并将它连接到您将在滚动视图的界面构建器中创建的超级视图约束。

你的.h:

中的

IBOutlet NSLayoutConstraint *topSpace;
float topSpaceValue;

然后使用以下方法更新该约束:

topSpace.constant = topSpaceValue;

您可以使用此方法检测滚动视图中的滚动并设置topSpace约束:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    topSpace.constant = topSpaceValue;
}

现在,检测scrollview移动速度以及为topSpaceValue设置的值的实际逻辑由您决定。此外,您还需要检测滚动视图的移动方向,以增加或减少topSpaceValue的值。

这看起来就像检测速度所需的链接:iPhone UIScrollView Speed Check

所以根据速度,设置约束。并且您可能希望检查约束的最小值,例如0,因此滚动视图不会滚动到屏幕顶部。