2015-11-05 134 views
1

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

+0

你可能需要澄清一下你在做什么。你想要一个tableView在一个mapview的顶部,但没有收到任何接触? – Alex

+0

你这样做的方式会变得有点复杂。您应该使滚动视图从地图底部开始,然后使用自动布局和更新高度约束,当用户滚动时,从屏幕顶部更新滚动视图的空间。这样,即使滚动视图上方只显示20个像素,您也可以触摸地图。你也应该发布一些相关的代码和图片,以帮助每个人明确你想要做的事情。 –

+0

@MSU_Bulldog如何更新高度限制?也许你知道函数的名称(ObjC) – Yahllilevy

回答

0

关闭我的评论。您需要将顶部空间设置为滚动视图上的超级查看约束。为约束创建一个IBOutlet,为约束的值创建一个浮点变量,并将其连接到顶层空间以超级查看约束,该约束将在界面生成器中在滚动视图中创建。

在您的.h

IBOutlet NSLayoutConstraint *topSpace; 
float topSpaceValue; 

然后使用此更新约束:

topSpace.constant = topSpaceValue; 

您可以检测滚动在用这种方法滚动视图,并设置topSpace约束:

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

现在,检测滚动视图移动速度有多快的实际逻辑以及设置为topSpaceValue是由你来弄清楚。您还需要检测滚动视图正在移动的方向,以增大或减小topSpaceValue的值。

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

所以根据速度设定的约束。你可能会想检查约束的最小值,比如0,所以scrollview不会从屏幕的顶部滚动。