Já pracuji na nějakém iPhone MapKit kódem, který vystřelí off některé události, kdy se hranice mapy změní (v podstatě některé dotazy na externím serveru). Tam je jedna hrana případ nemůžu řešit. Pokud uživatelé zadají novou adresu mám použít setRegion přiblížit na tomto místě a potom jsem spočítat hranice mapy a dotazovat můj externí server s těmito souřadnicemi. Vždycky říkám setRegion však existuje jedna hrana případ, kdy nedojde k odpálení. To znamená, že když uživatel magicky stává vybrat přesně stejnou adresu, která leží při současném středu mapy, pokud se mapa, která zvětší na přesně stejné oblasti. Samozřejmě tato možnost je vzácný, ale je snadno dosažitelné pomocí následující 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];
To by bylo ekvivalentem umožňuje uživateli umístit špendlík ve středu aktuální mapy a vypálit dotaz na můj server založený na tom. Bohužel, protože logiku kód závisí na oblasti měnící (což jsem udělal, takže uživatelé mohou snadno se posunovat po mapě a není nutné explicitně stisknout tlačítko refresh), musím vyřešit. Jak mohu vědět, kdy setRegion byl nazýván, ale nedojde k odpálení regionWillChange / regionDidChange. Mohu přepsat funkci, jak někteří?
EDIT: Jak jsem již uvedl v první odpovědi, snažil jsem se zjistit, kdy by region nezmění pomocí následující kód:
//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];
Bohužel, když jsem nastavit searchLocation být centrem současného mapě I získat následující výsledky:
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
V různých případech je chyba mírně liší, ale obecně řečeno, i když je region je mírně odlišná podobné setRegion nebo navíc nesmí regionDidChange, nestřílejte. Může mi někdo vysvětlit, proč? Nebo jak bych mohl jít o zjišťování to správně. Poznámka: Také jsem se snažil s mapView.centerCoordinate ale mám podobné chyby, a já jen chci vědět, kdy bude region NOT změnit (v případě, že centerCoordinate je stejná úroveň zoomu / region může ještě být odlišné).













