2011-05-07 53 views
3

在我的iPad应用程序中,我有两个相同大小的mapView,彼此相邻。我希望这些始终显示相同的区域。我现在使用regionDidChangeAnimated:delegate方法实现这一点。让两个MKMapViews显示相同的区域

这并不总是那么好(有时在缩放后区域不同),并且在用户移动其中一个地图和另一个地图移动之间存在滞后。

是否有一种很好的方式来复制跨两个地图的触摸,以便当用户在一个地图上平移和缩放时,它会自动在另一个地图上同时执行相同的操作?

我看到的一件事是创建一个UITouch对象,其位置值与正在移动的地图中的位置值相同,但这不是一个很好的解决方案。

有没有一种方法可以在一个UIView上复制一组触摸到另一个(因为MKMapView是一个UIView)?

感谢, 罗斯

+0

用户是否需要与两者进行交互?或者可以只读吗? – 2011-05-07 19:03:49

+0

用户需要能够与他们进行交互。这个想法是在每张地图上显示不同的叠加层,并允许用户在任一地图上平移,并始终让另一个显示相同的内容。 – 2011-05-09 04:18:34

回答

0

您可以使用UIGestureRecognizer在用户操作其中一个地图时帮助保持地图更加同步。

例如,使用UIPanGestureRecognizer时,手势识别器操作处理程序将在用户平移地图时触发多次 - 不像regionDidChangeAnimated只在平底锅完成时触发。

您需要添加一个手势识别器到一个或两个地图并实现您的自定义手势处理方法。还要实施shouldRecognizeSimultaneouslyWithGestureRecognizer委托方法并返回YES,以便您的手势处理程序可以与地图一起使用。

例子:

//add the gesture handler to map(s)... 
UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizer alloc] 
    initWithTarget:self action:@selector(gestureHandler:)]; 
pgr.delegate = self; 
[mapViewA addGestureRecognizer:pgr]; 
[pgr release]; 

//... 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
    shouldRecognizeSimultaneouslyWithGestureRecognizer: 
     (UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

- (void)gestureHandler:(UIGestureRecognizer *)gestureRecognizer 
{ 
    [mapViewB setRegion:mapViewA.region animated:NO]; 
} 

如果你想手势识别添加到这两个,你需要为每个地图(即可以不加pgr到两个地图。)创建一个单独的实例。您可能还需要/需要添加UIPinchGestureRecognizerUITapGestureRecognizer。尽管如此,您可以对所有识别器使用相同的处理程序方法。

我仍然会实施regionDidChangeAnimated,以防手势遗漏。

+0

我忘了你可以在地图上使用手势。谢谢! – 2011-07-27 18:47:40

0

尽量考虑使用一个静态变量和一个静态函数来控制缩放级别

+1

你能再详细一点吗? – 2011-06-17 03:44:12