Jeg jobber med noen iPhone MapKit kode som fyrer av noen hendelser når grensene til kartbytte (i utgangspunktet noen forespørsler til en ekstern server). Det er en kant tilfelle jeg kan ikke synes å løse. Når brukere angi en ny adresse bruker jeg setRegion å zoome inn på det stedet og etterpå jeg beregne grensene av kartet og spørre meg ekstern server med disse koordinatene. Jeg har alltid ringe setRegion men det er en kant tilfelle når det ikke vil brann. Det er når en bruker magisk som skjer for å velge nøyaktig samme adresse som ligger på dagens midt på kartet, når det kartet er zoomet til nøyaktig samme region. Selvfølgelig denne muligheten er sjelden, men det er lett oppnåelig med følgende kode:
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];
Dette ville være det samme som tillater brukeren å slippe en pinne i midten av det gjeldende kartet og fyre av en forespørsel til serveren min basert på det. Dessverre fordi koden logikk avhenger av regionen endring (som jeg har gjort, slik at brukerne enkelt kan panorere rundt på kartet og ikke trenger å eksplisitt trykker på en oppdateringsknappen), jeg trenger en omgå. Hvordan kan jeg vite når setRegion har blitt kalt, men det vil ikke fyre regionWillChange / regionDidChange. Kan jeg overstyre funksjonen noen hvordan?
EDIT: Som jeg kommenterte det første svaret, jeg prøvde å oppdage når regionen ikke ville endre ved hjelp av følgende kode:
//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];
Dessverre når jeg setter searchLocation å være i sentrum av den gjeldende kart jeg får følgende resultater:
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
I ulike tilfeller feilen er litt forskjellig, men generelt sett, selv når området er litt annerledes som dette setRegion eller morever, regionDidChange, ikke brann. Kan noen forklare hvorfor? Eller hvordan jeg kunne gå om å oppdage dette riktig. Merk: Jeg har også prøvd med mapView.centerCoordinate men jeg får samme feil, og jeg ønsker bare å vite når området ikke vil endre (hvis centerCoordinate er den samme zoomnivået / region kan likevel være forskjellig).













