2010-01-17 25 views
18

MKMapView'ımda bir bölge ayarlamak ve haritanın NE ve SW köşelerine karşılık gelen koordinatları bulmak istiyorum.MKMapview setRegion: animated: bittiğinde nasıl bilebilirim?

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

Sorun şu ki, haritaların yakınlaştırılmasını istiyorum. Ancak, setRegion'u ayarladığımda: YES'e animasyonluyken, haritanın yakınlaştırılmış bir şekilde (yani, animasyon tamamlanmadan önce) koordinatları almasını sağlarım. Animasyonun yapıldığını gösteren bir sinyal almanın bir yolu var mı?

cevap

21

Hiçbir zaman mapkit kullanılmaz, ancak MKMapViewDelegate, aradığınız gibi görünen bir mapView:regionDidChangeAnimated: yöntemine sahiptir.

+0

beni aptal, bu temsilci protokolü değil MKMapView kendisi oldu. Onu bir yerlerde gördüğümü biliyordum ... teşekkürler: D – deadroxy

4

Bunun çok yaşlı olduğunu biliyorum, ama sadece bir başkası bir cevap arayarak gelirse, işte bir alternatif.

Bu sürümle ilgili en güzel şey, bir tanesi hemen çağrıldığından, geri arama yönteminde tahmin/sabit kodlama yerine birincisi tamamlandığında bir tamamlama animasyonu çalıştırabilmenizdir.

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

ya da sadece

// zoom in... 
let km3:CLLocationDistance = 3000 
let crTight = MKCoordinateRegionMakeWithDistance(location.coordinate, km3, km3) 
MKMapView.animate(withDuration: 1.0, animations: { self.theMap.region = crTight }) 
İlgili konular