Δουλεύω σε κάποιο κώδικα iPhone MapKit οποία πυρκαγιές στα ανοικτά κάποια γεγονότα, όταν τα όρια της αλλαγής του χάρτη (κατά βάση κάποια ερωτήματα σε έναν εξωτερικό διακομιστή). Υπάρχει μία περίπτωση άκρη δεν μπορώ να φαίνεται να λύσουν. Όταν οι χρήστες εισάγουν μια νέα διεύθυνση χρησιμοποιώ setRegion να κάνετε ζουμ σε αυτή τη θέση και στη συνέχεια θα υπολογίσει τα όρια του χάρτη και διερευνούν την εξωτερική μου server με αυτές τις συντεταγμένες. Πάντα καλέστε setRegion όμως, υπάρχει μία περίπτωση άκρη όταν δεν θα βάλει φωτιά. Δηλαδή, είναι, όταν ένας χρήστης που συμβαίνει μαγικά για να επιλέξετε την ίδια ακριβώς διεύθυνση που βρίσκεται στο σημερινό κέντρο του χάρτη, όταν ο χάρτης μεγεθύνεται με τον ίδιο ακριβώς περιοχή. Φυσικά, η δυνατότητα αυτή είναι σπάνια, αλλά είναι εύκολο να επιτευχθεί με τον ακόλουθο κώδικα:
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];
Αυτό θα είναι το ισοδύναμο της που επιτρέπει στο χρήστη να ρίξει μια καρφίτσα στο κέντρο του τρέχοντος χάρτη και η φωτιά από ένα ερώτημα στον server μου με βάση αυτό. Δυστυχώς, επειδή η λογική κωδικό εξαρτάται από την αλλαγή περιοχής (που έχω κάνει, έτσι ώστε οι χρήστες μπορούν εύκολα να μετακινήσετε γύρω από το χάρτη και δεν χρειάζεται να πατήσετε ρητά ένα κουμπί ανανέωσης), χρειάζομαι ένα έργο γύρω. Πώς μπορώ να ξέρω πότε setRegion έχει κληθεί αλλά δεν θα βάλει φωτιά regionWillChange / regionDidChange. Μπορώ να παρακάμψετε τη λειτουργία κάποιο τρόπο;
EDIT: Όπως σχολίασε σχετικά με την πρώτη απάντηση, προσπάθησα να ανιχνεύσει όταν η περιοχή δεν θα αλλάξει, χρησιμοποιώντας τον ακόλουθο κώδικα:
//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];
Δυστυχώς, όταν έθεσα το searchLocation να είναι το κέντρο του τρέχοντος χάρτη πάρω τα ακόλουθα αποτελέσματα:
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
Σε διαφορετική περίπτωση το σφάλμα είναι ελαφρώς διαφορετική, αλλά σε γενικές γραμμές, ακόμη και όταν η περιοχή είναι λίγο διαφορετική, όπως αυτή setRegion ή Morever, regionDidChange, δεν φωτιά. Μπορεί κανείς να εξηγήσει για ποιο λόγο; Ή πώς θα μπορούσα να πάω για τον εντοπισμό αυτό σωστά. Σημείωση: Επίσης, προσπάθησα με mapView.centerCoordinate αλλά έχω παρόμοια λάθη, και εγώ το μόνο που θέλουν να ξέρουν πότε η περιοχή δεν θα αλλάξει (αν το centerCoordinate είναι το ίδιο με το επίπεδο ζουμ / περιοχή μπορεί ακόμα να είναι διαφορετική).













