1

我将 MKMapView 添加到 UIScrollView。我认为预期的功能是平移地图会导致地图移动,但它的父 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];

我尝试将独占触摸设置为“是”和“否”,但似乎没有任何效果。

有没有办法让行为正常工作,以便平移地图将阻止 UIScrollView 移动?我也尝试将地图更改为 UIScrollView 而不是 MKMapView ,但是具有相同的行为 - 所以我怀疑这是 MKMapView 特定的。

4

2 回答 2

1

预期的结果是正确的,当 Map View 被触摸时,滚动视图应该保持静止,因为它应该在触摸事件通过响应链传递到滚动视图之前接收到触摸事件。

我已经在一个空项目中快速测试了上面的代码,它按预期工作,对框架和尺寸的创建、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];
于 2012-09-16T21:49:06.677 回答
0

如果它对任何人有帮助,

将 a 添加MKMapView到 aUIScrollView应该可以按预期工作。在我的情况下,它不起作用,因为我的视图层次结构设置不正确。

如果您遇到问题,请查看如何添加子视图(即[self.view addSubview:mapView]. 确保MKMapView正确位于UIScrollView的层次结构中。

另外,我真的很喜欢revealapp.com来检查视图层次结构(不,我与他们没有关联;)

于 2014-04-09T19:29:03.627 回答