2011-06-21 65 views
3

我正在使用一個MKMapView這是可視區域(縮放級別)設置一個滑塊。 我用MKCoordinateRegionsetRegion:animated:設置了可見區域。使用MKMapView連續縮放?

問題是,我似乎無法對可見區域進行非常精確的控制。就好像緯度\經度差值快速捕捉到Google提供的默認〜21縮放級別。

我真正想要的是類似於捏縮放時Map.app的行爲。它縮放視圖直到達到新縮放級別的閾值,然後呈現新的地圖級別。

有沒有簡單的方法來訪問\模擬此行爲?它是如何工作的?我使用

代碼:

MKCoordinateRegion region; 
MKCoordinateSpan span; 
CLLocationCoordinate2D center = {45.475969,-73.64095}; 
region.center = center; 
span.latitudeDelta = 0.01; 
span.longitudeDelta = 0.01; 
region.span = span; 

[mapView setRegion:region animated:TRUE]; 

如果我使用0.01或0.013的增量,我得到完全相同的地圖。

+0

對於我的愛,把配件後的標籤! –

+0

0.5和0.01之間的區別? –

+0

是的,整體設置這樣的區域工作正常。我似乎無法獲得高精度。這就像三角洲地區對不同的「地圖等級」的地板。 –

回答

2

簡單的回答是,MapKit不允許您以編程方式設置縮放級別,而不是由google提供的默認21級別。您設置的區域將始終「捕捉」到最近的區域。

0

您可以設置mapview的visibleMapRect來實現連續縮放。 以下代碼顯示瞭如何放大1級(這是MKMapView的子類,所以self是MKMapView的一個實例)。

MKMapRect visibleRect = self.visibleMapRect; 
MKMapSize size = visibleRect.size; 
CGFloat aspectRatio = size.width/size.height; 
CGPoint center = CGPointMake(visibleRect.origin.x + size.width/2, visibleRect.origin.y + size.height/2); 
CGFloat zoomedHeight = size.height/2; // By divide by 2, will zoom in exact 1 level 
CGFloat zoomedWidth = zoomedHeight * aspectRatio; 
visibleRect = MKMapRectMake(center.x - zoomedWidth/2, center.y - zoomedHeight/2, zoomedWidth, zoomedHeight); 
self.visibleMapRect = visibleRect;