完全缩小时,MKMapView中的缩放问题

时间:2011-11-24 11:24:53

标签: iphone mkmapview zoom

点击按钮,我正在缩小地图。

因此,当地图完全缩小并且我尝试再次缩小地图时,它会在设置区域时崩溃。

不确定但是,有没有办法检测地图是否已达到最大缩放限制?

这是我缩小地图的代码

-(void)setZoomLevelForNoPicksCurrentLocationAt:(CLLocationCoordinate2D)currentCoordinate{
 MKCoordinateSpan span;
 MKCoordinateRegion region;
 region.center = currentCoordinate;
 span.latitudeDelta =self.mapView.region.span.latitudeDelta *2;
 span.longitudeDelta =self.mapView.region.span.longitudeDelta *2;
 region.span = span;
 [self.mapView setRegion:region animated:YES];  
 [self.mapView regionThatFits:region];
}

任何形式的帮助都会非常感激。

请查找崩溃日志

  
    

*由于未捕获的异常'NSInvalidArgumentException'而终止应用,原因:'无效的地区中心:+38.82259098,-67.50000000 span:+307.41536753,+ 450.00000000'     * 在第一次投掷时调用堆栈:     (         0 CoreFoundation 0x013c8be9 __exceptionPreprocess + 185         1 libobjc.A.dylib 0x0151d5c2 objc_exception_throw + 47         2 CoreFoundation 0x013c8b21 - [NSException raise] + 17         3 XXXapp 0x000ab237 - [MapViewController setZoomLevelForNoPicksCurrentLocationAt:] + 312

  

3 个答案:

答案 0 :(得分:11)

u可以提供的最小跨度值为0.0。在运行时,sp​​an的值变为负值,从而导致崩溃。只需硬线并尝试使用nslog来监控span的值。最大跨度值高于180.0将导致崩溃。

答案 1 :(得分:4)

我刚刚将以下检查添加到增量计算,以防止应用区域崩溃:

//calculate deltas
double deltaLat = fabs(max_lat - min_lat) * 2;
if (deltaLat > 180) deltaLat = 180;

double deltaLong = fabs(max_long - min_long) * 2;
if (deltaLong>360) deltaLong = 360;

因此区域delta纬度不能超过180,经度不能超过360。

答案 2 :(得分:0)

经过一些试验和错误测试后,

Swift 3.0 中的解决方案。

以下是我计算我的增量的方法:

let distanceLat = min(abs((currentLatitude! - pinLatitude) * 5), 180)
let distanceLon = min(abs((currentLongitude! - pinLongitude) * 5), 180)

* 5是随意的,随意改变它。