2012-01-29 12 views
5

Devo visualizzare un MKOverlay su una mappa, ma non riesco a visualizzarlo.Procedura: visualizzare MKOverlay su MKMapView

Sto seguendo lo example da Apple Location Awareness Programming Guide e l'overlay non verrà visualizzato. Qualsiasi aiuto sarebbe molto apprezzato, questa è la prima app per iPhone che ho realizzato, quindi potrei mancare qualcosa di semplice.

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

Tutti i suggerimenti di codifica sarebbe molto apprezzato. Grazie!

risposta

7

Assicurarsi di impostare delegate di mapView sull'istanza del controller di visualizzazione (forse File's owner in questo caso).

Nel builder dell'interfaccia, fare clic con il tasto destro del mouse sulla vista mappa, trascinare dal cerchio vuoto alla destra del delegato, all'icona Proprietario del file nella sezione Segnaposto nel riquadro a sinistra.

Per storyboard, collegarsi all'icona Controller vista anziché a Proprietario file.

+0

Come esattamente impostare il delegato sull'istanza del controller di visualizzazione? Sono nuovo di questo. – nslocum

+0

Fare clic con il tasto destro del mouse sulla vista della mappa del pennino, controllare innanzitutto se la presa di riferimento di MKMapView è mapView - Proprietario del file, quindi controllare se l'uscita 'delegate' è' Proprietario del file'. – ZhangChn

+0

sembra che il delegato non sia impostato e non riesco a capire come impostarlo su "Proprietario file". Inoltre, sono su iOS 5, quindi l'icona del proprietario del file non viene visualizzata. – nslocum

0

Probabilmente si uccide aView in - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay di return nil; Provare ad aggiungere else prima.

- (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

Grazie, ma questo non era il problema. – nslocum

0

Hai risolto il problema? Basta trascinare dal cerchio accanto al delegato (nella tua schermata) al cerchio che è il nome della classe .. c'è un'impostazione nell'ispettore che ti permetterebbe di mostrare dove sei anche ..? Hai fatto in modo di centrare la mappa nell'opzione viewDidLoad in modo che venga visualizzata su Colorado ..