MKMapView平移导致父UIScrollView滚动

时间:2012-09-16 20:38:59

标签: objective-c ios uiscrollview mkmapview mapkit

我有一个添加到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特定的。

2 个答案:

答案 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来检查视图层次结构(并且我没有与它们相关联;)