2011-05-07 57 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