2011-11-24 76 views
3

我缩小了点击按钮的地图。当MKMapView完全缩小时缩放问题

所以当地图完全缩小时,如果我尝试再次缩小它,那么它在设置区域时会崩溃。

不确定但是,有没有什么方法可以检测地图是否达到了最大放大限制?

这里是我的代码,以缩小地图

-(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跨度:307.41536753,450.00000000' *在第一次投掷调用堆栈: ( 0的CoreFoundation 0x013c8be9 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x0151d5c2 objc_exception_throw + 47 2的CoreFoundation 0x013c8b21 - [NSException提高] + 17 3 XXXapp 0x000ab237 - [的MapViewController setZoomLevelForNoPicksCurrentLocationAt:] + 312

+0

您能否在这里发布一个崩溃消息在控制台和堆栈跟踪? – Denis

+0

我已经说明了崩溃的原因..地图缩小到最大程度,现在我再次调用上述函数,它再次尝试缩小地图,导致崩溃..请在问题中查找崩溃日志 –

+2

正如@iamsult所示,三角洲超出范围。纬度增量必须从0到180,而经度增量必须从0到360.在调用setRegion之前,根据需要调整增量。此外,调用regionThatFits是毫无意义的。 – Anna

回答

11

最小跨度值u可以提供为0.0。在运行时,跨度值变得负值,导致崩溃。只是硬线,并尝试并把一个nslog监测跨度的价值。最大跨度值为180.0以上会导致崩溃。

+0

我试图通过把NSLog()检出。但正如你在代码中看到的那样,跨度值增加了两倍。所以最初它的0.87那么它可以正常工作到103.00,但是当我翻倍到306.00时它会崩溃..所以span的值可以肯定大于0.0。可能是你有拼写错误的最大值而不是最小值:P –

+0

你也可以看到在问题下面添加的崩溃记录中的跨度值。你知道跨度设置的最大值是多少? –

+1

抱歉错字。量程的最大值是180.0。 – iamsult

2

我刚添加下列检查,以增量的计算,以防止上涂敷区域崩溃:

//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; 

所以区域增量纬度不能更然后180和经度更然后360

+0

这实际上是更好的答案。第一个(接受的)只是部分正确! – toom

0

溶液Swift 3.0经过一些试验和错误测试。

这是我如何计算我的三角洲:

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

的* 5是任意的,随意改变它,你会的。