Sunt de lucru pe un cod pentru iPhone MapKit care trage off unele evenimente atunci când limitele schimbării hartă (practic câteva interogări la un server extern). Există un caz de margine nu pot par pentru a rezolva. Atunci când utilizatorii introduc o nouă adresă Eu folosesc setRegion pentru a mări locația respectivă și după aceea am calcula limitele hărții și a interoga serverul meu extern cu aceste coordonate. Eu numesc întotdeauna setRegion cu toate acestea, există un caz de margine, atunci când acesta nu se va declanșa. Aceasta, este, atunci când un utilizator se întâmplă magic pentru a selecta aceeași adresă exactă pe care se află în centrul actual al hărții, atunci când harta este mărită la exact aceeași regiune. Desigur, această posibilitate este rar, dar este ușor realizabil cu următorul cod:
CLLocation *centerOfMap = [[CLLocation alloc] initWithLatitude:mapView.centerCoordinate.latitude longitude:mapView.centerCoordinate.longitude];
mySearchLocation.searchLocation = centerOfMap;
//Recenter and zoom map in on search location
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center = mySearchLocation.searchLocation.coordinate;region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
[self.mapView setRegion:region animated:YES];
Acest lucru ar fi echivalentul de a permite utilizatorului să renunțe la un cod PIN la centrul hărții curente și de foc de pe o interogare de la serverul meu bazat pe asta. Din păcate, pentru că logica de cod depinde de regiunea în schimbare (pe care l-am făcut, astfel încât utilizatorii să poată deplasa cu ușurință în jurul valorii de hartă și nu trebuie să apăsați în mod explicit un buton de reîmprospătare), am nevoie de o lucrare în jurul valorii. Cum pot să știu când setRegion a fost numit, dar nu se va declanșa regionWillChange / regionDidChange. Pot înlocui funcția de unele cum?
EDIT: Așa cum am comentat cu privire la primul răspuns, am încercat să detecteze în cazul în care regiunea nu ar schimba utilizând următorul cod:
//Recenter and zoom map in on search location
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center = mySearchLocation.searchLocation.coordinate;
region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
region = [mapView regionThatFits:region]; //Not sure if this is necessary
NSLog(@diff in latitude of center %f, (mapView.region.center.latitude - region.center.latitude));
NSLog(@diff in longitude of center %f, (mapView.region.center.longitude - region.center.longitude));
NSLog(@diff in latitude span %f, (mapView.region.span.latitudeDelta - region.span.latitudeDelta));
NSLog(@diff in longitude span %f, (mapView.region.span.longitudeDelta - region.span.longitudeDelta));
[self.mapView setRegion:region animated:YES];
Din păcate, atunci când am setat searchLocation să fie centrul hărții curente am obține următoarele rezultate:
diff in latitude of center 0.000000
diff in longitude of center 0.000016
diff in latitude span -0.000000
diff in longitude span 0.000000
În diferite cazuri, eroarea este puțin diferit, dar, în general vorbind chiar și atunci când regiunea este puțin diferită ca aceasta setRegion sau Morever, regionDidChange, nu foc. Poate cineva explica de ce? Sau cum am putea merge despre detectarea acestui mod corespunzător. Notă: De asemenea, am încercat cu mapView.centerCoordinate, dar am obține erori similare, și vreau doar să știu când regiunea nu se va schimba (în cazul în care centerCoordinate este același nivel de zoom / regiune pot fi încă diferite).













