Я работаю над iPhone MapKit кодом, который выстреливает некоторые события, когда границы изменения карты (в основном некоторые запросы на внешний сервер). Существует один крайний случай, я не могу решить. Когда пользователь вводит новый адрес я использую setRegion, чтобы увеличить это место, а потом я вычислить пределы карты и запросить мой внешний сервер с этими координатами. Я всегда называю 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];
Это было бы эквивалентно позволяя пользователь уронить булавку в центре текущей карты и выпалить запрос на мой сервер, основанный на этом. К сожалению, поскольку логика кода зависит от региона меняющегося (который я сделал так, чтобы пользователи могли легко перемещаться по карте и не должны явно нажать кнопку обновления), мне нужна работа вокруг. Как я могу знать, когда 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 тот же уровень масштабирования / регион по-прежнему может быть разным).













