我有一个添加到UIScrollView的MKMapView。我认为预期的功能是平移地图会导致地图移动,但它的父UIScrollView不会滚动。即如果您正在平移地图,则滚动视图将保持在当前位置。
这是我的代码:
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.height)];
[scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
[self.view addSubview:scrollView];
double mapHeight = 200;
if([AppDelegate isRunningOniPad])
mapHeight = 400;
map = [[MKMapView alloc] initWithFrame:CGRectMake(0, 200, self.width, mapHeight)];
[map setExclusiveTouch:NO];
[scrollView map];
我尝试过设置独家触摸YES和NO,但似乎没有任何效果。
有没有办法让行为正常工作,以便平移地图将阻止UIScrollView移动?我已经尝试将地图更改为UIScrollView而不是MKMapView,但是它具有相同的行为 - 所以我怀疑这是MKMapView特定的。
答案 0 :(得分:1)
预期结果是正确的,滚动视图应该在触摸地图视图时保持静止,因为这应该在将响应者链向上传递到滚动视图之前接收触摸事件。
我已经在一个空项目中快速测试了上面的代码,这正如预期的那样,对框架和框架的创建进行了一些改动。尺寸,iPad尺寸检测以及将地图添加为滚动视图的子视图。
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
[scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
// Make the content size large to allow scroll view to move
[scrollView setContentSize:CGSizeMake(1000, 2000)];
[self.view addSubview:scrollView];
double mapHeight = 200;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
mapHeight = 400;
}
MKMapView *map = [[MKMapView alloc] initWithFrame:CGRectMake(0, 200, self.view.bounds.size.width, mapHeight)];
[map setExclusiveTouch:NO];
[scrollView addSubview:map];
答案 1 :(得分:0)
如果有人帮助,
将MKMapView
添加到UIScrollView
应该可以正常工作。在我的情况下,它没有工作,因为我的视图层次结构设置不正确。
如果您遇到问题,请查看如何添加子视图(例如[self.view addSubview:mapView]
。确保MKMapView
层次结构中的UIScrollView
正确无误
另外,我真的很喜欢revealapp.com来检查视图层次结构(并且我没有与它们相关联;)