使用MKMapView连续缩放?

时间:2011-06-21 14:01:09

标签: iphone ios google-maps

我正在使用MKMapView使用滑块设置可见区域(缩放级别)。 我使用MKCoordinateRegionsetRegion:animated:设置了可见区域。

问题在于我似乎无法对可见区域进行极其精确的控制。就好像纬度\经度增量一样可以捕捉到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的增量,我会得到完全相同的地图。

3 个答案:

答案 0 :(得分:2)

简单的答案是,MapKit不允许您以编程方式设置缩放级别,而不是谷歌提供的默认21级别。您设置的区域范围将始终“捕捉”到最近的区域。

答案 1 :(得分:0)

答案 2 :(得分: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;