2011-11-24 47 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是任意的,隨意改變它,你會的。