MKMapView и addOverlay - разбор оверлея из kml - PullRequest
2 голосов
/ 10 марта 2011

Я пытаюсь наложить карту на простое приложение для iPhone. Проблема в том, что даже если приложение соответствует без ошибок, ломаная линия не отображается на карте. Консоль говорит, что [overlay lastObject] на самом деле является MKPolyline. Может кто-то может увидеть, что я делаю не так здесь ... Я новичок в разработке приложений для iPhone?

Вот мой соответствующий код для моего контроллера MapView:

- (void)viewDidLoad {   
    [super viewDidLoad];    

    CGRect mapFrame = CGRectMake(0.0f, 31.0f, 320.0f, 370.0f);  
    mapView = [[MKMapView alloc] initWithFrame:mapFrame];

    MKCoordinateRegion region;
    MKCoordinateSpan span;
        span.latitudeDelta=.02;
        span.longitudeDelta=.02;

    CLLocationCoordinate2D location;
        location.latitude = 29.43421;
        location.longitude = -98.48436; 

        region.span=span;
        region.center=location; 

    NSURL *url = [NSURL URLWithString:@"They asked me not to post this... It is a valid KML file though"];
    kml = [[KMLParser parseKMLAtURL:url] retain];

    // Add all of the MKOverlay objects parsed from the KML file to the map.
    NSArray *overlay = [kml overlays];      
    NSLog(@"TEST: %@",[overlay lastObject]);

    [mapView setRegion:region animated:TRUE];
    [mapView regionThatFits:region];        
    [mapView addOverlay:[overlay lastObject]];

    [self.view insertSubview:mapView atIndex:0];    

    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"bkgd.png"]];
    self.view.backgroundColor = background; 
    [background release];
    [url release];  

}

#pragma mark-
#pragma mark MKMapViewDelegate
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{       
    MKPolylineView *line = [[[MKPolylineView alloc] initWithPolyline:overlay] autorelease];
    line.strokeColor = [UIColor blueColor];
    line.lineWidth = 5;
    return line;
}

1 Ответ

12 голосов
/ 10 марта 2011

Похоже, что делегат вида карты не установлен, и в этом случае метод viewForOverlay никогда не будет вызван. После строки MKMapView alloc + initWithFrame в viewDidLoad добавьте это:

mapView.delegate = self;
...