2013-02-14 62 views
6

努力尋找一種方法來製作地圖縮放並居中註解引腳。引腳掉落,但地圖加載海洋。代碼如下。試圖將中心地圖放在引腳上(MKMapView)

- (void) connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [self setString]; 

    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil]; 
    NSDictionary *location = [dic objectForKey:@"location"]; 
    NSDictionary *coordinate = [location objectForKey:@"coordinate"]; 
    NSString *lat = [coordinate objectForKey:@"latitude"]; 
    NSString *lon = [coordinate objectForKey:@"longitude"]; 

    for (NSDictionary *diction in coordinate) 
    { 
    [array addObject:lat]; 
    [array addObject:lon]; 
    } 
    { 
    CLLocationCoordinate2D track; 
    track.latitude = [lat doubleValue]; 
    track.longitude = [lon doubleValue]; 

    MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"Title of Place Here" andCoordinate:track]; 

    [self.mapView addAnnotation:newAnnotation]; 
    } 
} 

第二個問題,很有關係:

貫徹回答上述問題後,因爲我已經修改了我的代碼。現在,我的座標從前一個視圖到達我的MKMapView,這樣我就不必費心進行兩次API調用,第二次是在MKMapView中。目前在我的viewWillAppear中我有以下,再次我遇到了一個問題,認爲不會居中或放大的引腳上:

if ([self.stringToDisplay isEqualToString: @"Firehouse Gallery"]) 
{ 
    UIImage *img = [UIImage imageNamed:@"firehouse.jpg"]; 
    [imageView setImage:img]; 

    CLLocationCoordinate2D track; 
    track.latitude = [lat doubleValue]; 
    track.longitude = [lon doubleValue]; 

    MKCoordinateRegion region; 
    MKCoordinateSpan span; 
    span.latitudeDelta = 0.01; 
    span.longitudeDelta = 0.01; 
    region.span = span; 
    region.center = track; 

    MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"Firehouse Gallery" andCoordinate:track]; 

    [self.mapView addAnnotation:newAnnotation]; 
    [self.mapView setRegion:region animated:TRUE]; 
    [self.mapView regionThatFits:region]; 
} 

反饋我非常感激,因爲我不知道我應該做些什麼。在正確的座標引腳負載,只是沒有中心/變焦...

+0

@dthien也許你能告訴我如何可以解決上述這一個?謝謝你的時間。 – Greg 2013-02-17 19:09:42

回答

20

試試這個:

{ 
    CLLocationCoordinate2D track; 
    track.latitude = [lat doubleValue]; 
    track.longitude = [lon doubleValue]; 

    MKCoordinateRegion region; 
    MKCoordinateSpan span; 
    span.latitudeDelta = 0.01; 
    span.longitudeDelta = 0.01; 
    region.span = span; 
    region.center = track; 

    MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"Title of Place Here" andCoordinate:track]; 

    [self.mapView addAnnotation:newAnnotation]; 
    [self.mapView setRegion:region animated:TRUE]; 
    [self.mapView regionThatFits:region]; 
} 
3
- (void)zoomMapViewToFitAnnotationsWithExtraZoomToAdjust:(double)extraZoom 
{ 
    if ([self.annotations count] == 0) return; 

    int i = 0; 
    MKMapPoint points[[self.annotations count]]; 

    for (id<MKAnnotation> annotation in [self annotations]) 
    { 
     points[i++] = MKMapPointForCoordinate(annotation.coordinate); 
    } 

    MKPolygon *poly = [MKPolygon polygonWithPoints:points count:i]; 

    MKCoordinateRegion r = MKCoordinateRegionForMapRect([poly boundingMapRect]); 
    r.span.latitudeDelta += extraZoom; 
    r.span.longitudeDelta += extraZoom; 

    [self setRegion: r animated:YES]; 
}