2011-06-21 41 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;