Dolgozom néhány iPhone MapKit kódot, amelyet kilőtt néhány esemény, amikor a határokat a térképen változás (alapvetően néhány lekérdezést egy külső szerver). Van egy éle esetben nem tudok úgy tűnik, hogy megoldja. Amikor a felhasználó belép egy új címet használok setRegion hogy a nagyítás a helyeken, és utána én kiszámítja a határait a térképet, és lekérdezni a külső szerver a koordináták. Mindig hívja setRegion azonban van egy éle esetben, ha ez nem villan. Ez, az, amikor a felhasználó varázslatosan történik, hogy kiválassza pontosan ugyanazt a címet, hogy fekszik a folyó a térkép közepén, amikor a térkép kisléptékű, hogy pontosan ugyanabban a régióban. Természetesen ez a lehetőség a ritka, de ez könnyen megvalósítható a következő kód:
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];
Ez lenne egyenértékű, amely lehetővé teszi a felhasználó számára, hogy egy gombostűt középpontjában a jelenlegi térkép és a tűz ki a lekérdezést saját szerver alapuló. Sajnos, mivel a kód logikai függ a régió változó (amit megtettem annak érdekében, hogy a felhasználók könnyen mozgathatja a térképet, és nem kell nyomnunk egy frissítés gombot), kell a mű körül. Hogyan lehet tudni, hogy mikor setRegion nevezték, de ez nem fog villanni regionWillChange / regionDidChange. Felülírhatom a funkció bizonyos hogyan?
EDIT: Mint megjegyezte, az első válasz, megpróbáltam kimutatni, amikor a régióban nem változnak a következő kódot:
//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];
Sajnos, amikor én meg a searchLocation, hogy a központ a jelenlegi térkép kapok a következő eredménnyel:
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
Ettől eltérő esetben a hiba némileg eltérő, de általában elmondható akkor is, ha a régió kicsit más, mint ez setRegion vagy Morever, regionDidChange, nem tűz. Tud valaki magyarázni, hogy miért? Vagy hogyan tudnék menni a kimutatására ezt megfelelően. Megjegyzés: Én is próbáltam mapView.centerCoordinate de kapok hasonló hibákat, és csak azt akarom tudni, hogy mikor a régió nem fog változni (ha a centerCoordinate ugyanaz a nagyítási szinten / régió is eltérhet).













