Ik ben bezig met een aantal iPhone MapKit code die vuurt een aantal evenementen als de grenzen van de kaart te veranderen (in feite enkele vragen naar een externe server). Er is een rand geval ik kan niet lijken op te lossen. Wanneer gebruikers een nieuw adres gebruik ik setRegion om in te zoomen op die locatie en daarna bereken ik de grenzen van de kaart en opvragen via mijn externe server met die coördinaten. Ik roep altijd setRegion is er echter één rand geval wanneer het niet zal ontslaan. Dat wil zeggen, wanneer een gebruiker op magische wijze gebeurt om de exacte hetzelfde adres, dat ligt op de huidige midden van de kaart, wanneer die kaart is ingezoomd op precies dezelfde regio te selecteren. Natuurlijk is deze mogelijkheid is zeldzaam, maar het is gemakkelijk bereikbaar met de volgende code:
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];
Dit zou het equivalent van het toestaan van de gebruiker om een pin te laten vallen in het midden van de huidige kaart en Vuur een query naar mijn server op basis van dat. Helaas omdat de code logica is afhankelijk van de regio te veranderen (die ik heb gedaan, zodat gebruikers gemakkelijk kunnen over de kaart en niet expliciet druk op de refresh-knop), ik heb een werk rond. Hoe kan ik weten wanneer setRegion is genoemd, maar het zal niet afgaan regionWillChange / regionDidChange. Kan ik de functie wat hoe overschrijven?
EDIT: Zoals ik op het eerste antwoord merkte, heb ik geprobeerd om te detecteren wanneer de regio niet zou veranderen met behulp van de volgende code:
//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];
Helaas toen ik de searchLocation naar het midden van de huidige kaart ik de volgende resultaten te krijgen:
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
In andere gevallen is de fout is iets anders maar in het algemeen, zelfs als de regio is iets anders als deze setRegion of Voorts mogen regionDidChange, niet vuren. Kan iemand uitleggen waarom? Of hoe ik kan gaan over het opsporen van deze goed. Let op: Ik heb ook geprobeerd met mapView.centerCoordinate maar ik krijg soortgelijke fouten, en ik wil alleen te weten wanneer de regio zal niet veranderen (als de centerCoordinate hetzelfde is het zoomniveau / regio kan nog steeds verschillen).













