2011-05-28 30 views
1

在我的mapView:regionDidChangeAnimated方法中,我打電話來查找地圖上的地點,但我只想在地圖移動了大量數據時進行調用。你如何測量地圖移動的距離?

下面是場景:

  1. 用戶移動地圖或負載
  2. HTTP調用get找地方
  3. 新增地點的地圖。
  4. 問題!用戶點擊一個註釋打開標題氣泡,它靠近邊緣,因此它會移動地圖。由於數據加載與地圖移動事件相關,標記消失並被重新添加。

我應該怎麼看跨度和中心點的變化?

@Scott感謝您的visibleMapRect想法。這是我到目前爲止的工作,它仍然需要考慮放大和縮小。

MKMapRect newRect = _mapView.visibleMapRect; 
MKMapRect oldRect = currentRect; 

float leftBoundry = (newRect.origin.x-(newRect.size.width/4)); 
float rightBoundry = (newRect.origin.x+(newRect.size.width/4));  
float topBoundry = (newRect.origin.y-(newRect.size.height/4)); 
float bottomBoundry = (newRect.origin.y+(newRect.size.height/4)); 

NSLog(@"Origin x %f, y %f", oldRect.origin.x, oldRect.origin.y); 
NSLog(@"Boundries left %f, top %f, right %f, bottom %f", leftBoundry, topBoundry, rightBoundry, bottomBoundry);  

if (oldRect.origin.x < leftBoundry || oldRect.origin.x > rightBoundry || oldRect.origin.y < topBoundry || oldRect.origin.y > bottomBoundry) { 
    [self loadLocations]; 
    currentRect = newRect; 
} 

回答

1

嗯。這聽起來像是通過刪除所有註釋來刷新您的地圖,然後(重新)顯示落在visibleMapRect之內的所有註釋 - 解決此問題可能需要更細緻的方法來更新地圖。

一種方法可能是使用MKMapRectIntersection來識別您的「舊」和「新」visibleMapRect s之間的重疊,並且(如果有)將該區域中的註釋排除或重新添加。或者,您可以計算在屏幕上滾動的L形區域,並僅對該區域內的數據進行HTML調用。

或者您可以檢查地圖的「舊」中心是否仍然在visibleMapRect之內,如果是這樣,則任意決定地圖未移動大量數據。這可能會讓你在屏幕上的區域應該有註釋,但不要,但是。

最後,您可以只存儲用戶選擇註釋的座標,並且如果該座標在地圖移動後仍在屏幕上,請找到它並重新選擇註釋。