Как я могу знать, когда MKMapview setRegion: анимированные: закончил?

голоса
18

Я хочу, чтобы установить область на моем MKMapView, а затем найти координаты, соответствующие NE и SW углу карты.

This code works just fine to do that:
//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:NO]; //When this is set to YES it seems to break the coordinate calculation because the map is in motion

//After the new search location has been added to the map, and the map zoomed, we need to update the search bounds
//First we need to calculate the corners of the map so we get the points
CGPoint nePoint = CGPointMake(self.mapView.bounds.origin.x + mapView.bounds.size.width, mapView.bounds.origin.y);
CGPoint swPoint = CGPointMake((self.mapView.bounds.origin.x), (mapView.bounds.origin.y + mapView.bounds.size.height));

//Then transform those point into lat,lng values
CLLocationCoordinate2D neCoord;
neCoord = [mapView convertPoint:nePoint toCoordinateFromView:mapView];
CLLocation *neLocation = [[CLLocation alloc] initWithLatitude:neCoord.latitude longitude:neCoord.longitude];

CLLocationCoordinate2D swCoord;
swCoord = [mapView convertPoint:swPoint toCoordinateFromView:mapView];
CLLocation *swLocation = [[CLLocation alloc] initWithLatitude:swCoord.latitude longitude:swCoord.longitude];

Проблема в том, я хотел бы, масштаб карты, чтобы быть анимированными. Однако, когда я поставил setRegion: анимированный Да, я в конечном итоге получить координаты с карты, если это увеличенный выходом (то есть до того, как анимация будет завершена). Есть ли способ, чтобы получить сигнал о том, что анимация делается?

Задан 17/01/2010 в 20:19
источник пользователем
На других языках...                            


2 ответов

голоса
21

Никогда не MapKit но MKMapViewDelegate есть метод , mapView:regionDidChangeAnimated:который выглядит как то , что вы ищете.

Ответил 17/01/2010 в 20:38
источник пользователем

голоса
5

Я знаю, что это супер стар, но только в том случае, если кто-то приходит, ища ответ, вот альтернатива.

Хорошая вещь об этой версии является то, что вы можете запустить завершения анимации в тот момент, первый один является полным, вместо того, чтобы гадать / его сюда вручную метод обратного вызова, так что один называются сразу.

[MKMapView animateWithDuration:1.0 animations:^{
    [mapView setRegion:mapRegion animated:YES];
} completion:^(BOOL finished) {
    [UIView animateWithDuration:1.0 animations:^{
        self.mapDotsImageView.alpha = 1.0;
    }];
}];

или просто

// zoom in...
let km3:CLLocationDistance = 3000
let crTight = MKCoordinateRegionMakeWithDistance(location.coordinate, km3, km3)
MKMapView.animate(withDuration: 1.0, animations: { self.theMap.region = crTight })
Ответил 30/07/2016 в 00:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more