2012-01-29 20 views
5

Necesito mostrar una MKOverlay en un mapa, pero no puedo conseguir que aparezca realmente.Cómo mostrar MKOverlay en MKMapView

Estoy siguiendo el example de Apple Location Awareness Programming Guide y la superposición no se mostrará. Cualquier ayuda sería muy apreciada, esta es la primera aplicación de iPhone que he hecho, por lo que podría estar perdiendo algo simple.

NavViewController.h

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface NavViewController : UIViewController <MKMapViewDelegate> { 
} 
@property (weak, nonatomic) IBOutlet MKMapView *mapView; 

@end 

NavViewController.m

#import "MSUNavViewController.h" 
#import <CoreLocation/CoreLocation.h> 

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
    if ([overlay isKindOfClass:[MKPolygon class]]) 
    { 
     MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay]; 

     aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]; 
     aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7]; 
     aView.lineWidth = 3; 

     return aView; 
    } 
    return nil; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Define an overlay that covers Colorado. 
    CLLocationCoordinate2D points[4]; 

    points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116); 
    points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066); 
    points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981); 
    points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267); 

    MKPolygon* poly = [MKPolygon polygonWithCoordinates:points count:4]; 
    poly.title = @"Colorado"; 

    [_mapView addOverlay:poly]; 
} 

Storyboard:

storyboard

Cualquier sugerencia de codificación sería muy apreciada. Gracias!

Respuesta

7

Asegúrese de establecer mapView's delegate en la instancia del controlador de vista (quizás File's owner en este caso).

En el generador de interfaz, haga clic con el botón derecho en la vista del mapa, arrastre desde el círculo vacío a la derecha del delegado, al icono Propietario del archivo en la sección Placeholder en el panel de la izquierda.

Para el guión gráfico, conéctese al icono Controlador de vista en lugar de al Propietario del archivo.

+0

¿Cómo configuro exactamente el delegado en la instancia del controlador de vista? Soy nuevo en esto. – nslocum

+0

Haga clic con el botón derecho en la vista de mapa de la punta, primero compruebe si la salida de referencia de MKMapView es mapView - Propietario de archivo, luego verifique si su salida de 'delegado' es 'Dueño de archivo '. – ZhangChn

+0

Parece que el delegado no está configurado y no puedo encontrar la manera de configurarlo como 'Propietario del archivo '. Además, estoy en IOS 5, por lo que el ícono del propietario del archivo no aparece. – nslocum

0

Probablemente mates aView en - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay por return nil; Intenta agregar else antes.

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
    if ([overlay isKindOfClass:[MKPolygon class]]) 
    { 
     MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay]; 

     aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]; 
     aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7]; 
     aView.lineWidth = 3; 

     return aView; 
    } 
    else return nil; 
} 
+0

Gracias, pero este no era el problema. – nslocum

0

¿Has resuelto tu problema? Simplemente arrastre desde el círculo al lado de delegar (en su captura de pantalla) hasta el círculo que es el nombre de la clase ... ¿hay una configuración en el inspector que le permita mostrar dónde está también ...? Hizo necesario centrar el mapa en, por ejemplo, viewDidLoad para que se muestre en Colorado ...