Hoe kan ik weten wanneer MKMapView setRegion: animated: klaar is?

stemmen
18

Ik wil een regio in te stellen op mijn MKMapView en dan vinden de coördinaten die overeenkomt met de NO en ZW hoek van de kaart.

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];

Het probleem is dat ik zou willen dat de kaart zoom worden geanimeerd. Echter, toen ik de setRegion ingesteld: geanimeerd op JA, ik uiteindelijk het verkrijgen van de coördinaten van de kaart wanneer het wordt ingezoomd uitweg (dat wil zeggen, voordat de animatie is voltooid). Is er een manier om een ​​signaal dat de animatie wordt gedaan te krijgen?

De vraag is gesteld op 17/01/2010 om 20:19
bron van user
In andere talen...                            


2 antwoorden

stemmen
21

Nooit gebruikt mapkit maar de MKMapViewDelegate heeft een methode mapView:regionDidChangeAnimated:die lijkt te zijn wat je zoekt.

antwoordde op 17/01/2010 om 20:38
bron van user

stemmen
5

Ik weet dat dit is super oud, maar voor het geval iemand anders komt door te zoeken naar een antwoord, hier is een alternatief.

Het leuke van deze versie is dat je een voltooiing animatie op het exacte moment dat de eerste is voltooid in plaats van gissen / hardcoding het in de callback methode, omdat dat men meteen heet kan draaien.

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

of gewoon

// zoom in...
let km3:CLLocationDistance = 3000
let crTight = MKCoordinateRegionMakeWithDistance(location.coordinate, km3, km3)
MKMapView.animate(withDuration: 1.0, animations: { self.theMap.region = crTight })
antwoordde op 30/07/2016 om 00:23
bron van user

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