سؤال

I am using a Map View within a UIViewController and I have provided a default location to zoom in on, with an annotation as well. However the zoom is not working. The Annotation is working fine, but the initial zoom to location isn't working.

I'm not sure what's causing the issue. Any help would be greatly appreciated.

Here's my code:

- (void)viewDidLoad
{
    [super viewDidLoad];

    MKCoordinateRegion myRegion;

    //Center
    CLLocationCoordinate2D center;
    center.latitude = 39.21516;
    center.longitude = -76.580806;

    //Span
    MKCoordinateSpan span;
    span.latitudeDelta = 0.02f;
    span.longitudeDelta = 0.02f;

    myRegion.center = center;
    myRegion.span = span;

    //set mapView
    [self.mapView setRegion:ascRegion animated:YES];

    //Annotation
    //Create coordinate for annotation
    CLLocationCoordinate2D theLocation;
    theLocation.latitude = 39.21516;
    theLocation.longitude = -76.580806;

    MyMapAnnotation * myAnnotation = [MyMapAnnotation alloc];
    myAnnotation.coordinate = theLocation;
    myAnnotation.title = @"I am here";
    myAnnotation.subtitle = @"This is where I am";

    [self.mapView addAnnotation:myAnnotation];
}
هل كانت مفيدة؟

المحلول

Try to follow this answer:

- (void)zoomToFitMapAnnotations:(MKMapView *)mapView { 
    if ([mapView.annotations count] == 0) return; 

    CLLocationCoordinate2D topLeftCoord; 
    topLeftCoord.latitude = -90; 
    topLeftCoord.longitude = 180; 

    CLLocationCoordinate2D bottomRightCoord; 
    bottomRightCoord.latitude = 90; 
    bottomRightCoord.longitude = -180; 

    for(id<MKAnnotation> annotation in mapView.annotations) { 
        topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude); 
        topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude); 
        bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude); 
        bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude); 
    } 

    MKCoordinateRegion region; 
    region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5; 
    region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5;      
    region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.1; 

    // Add a little extra space on the sides 
    region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.1; 

    region = [mapView regionThatFits:region]; 
    [mapView setRegion:region animated:YES]; 
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top