2010-08-30 12 views
0

Je travaille avec Mapkit et je dois afficher des annotations sur la carte, mais je ne suis pas en mesure d'afficher l'annotation. Voici mon code:Afficher l'annotation dans le kit Carte

@interface MyMapView : UIViewController <MKAnnotation,MKMapViewDelegate>{ 

MKMapView *Obj_Map_View; 
MKPlacemark *pmark; 
MKReverseGeocoder *geocoder1; 
} 

@end 


#import "MyMapView.h" 
@implementation MyMapView 

- (id)init { 
    if (self = [super init]) { 

    } 
    return self; 
} 

- (void)loadView { 
    [super loadView]; 
    Obj_Map_View = [[MKMapView alloc]initWithFrame:self.view.bounds]; 
    Obj_Map_View.showsUserLocation =YES; 
    Obj_Map_View.mapType=MKMapTypeStandard; 
    [self.view addSubview:Obj_Map_View]; 
    Obj_Map_View.delegate = self; 

    CLLocationCoordinate2D cord = {latitude: 19.120000, longitude: 73.020000}; 
    MKCoordinateSpan span = {latitudeDelta:0.3, longitudeDelta:0.3}; 
    MKCoordinateRegion reg= {cord,span}; 
    [Obj_Map_View setRegion:reg animated:YES]; 
    //[Obj_Map_View release]; 
} 

- (NSString *)subtitle{ 
    return @"Sub Title"; 
} 

- (NSString *)title{ 
    return @"Title"; 
} 

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation 
{ 
    MKPinAnnotationView *annov = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"Current location"]; 
    annov.animatesDrop = TRUE; 
    [annotation title][email protected]"Current location"; 
    annov.canShowCallout = YES; 
    [annov setPinColor:MKPinAnnotationColorGreen]; 
    return annov; 
} 

Le code ci-dessus fonctionne très bien et affiche une carte mais pas avec l'annotation.

+0

Pouvez-vous modifier votre question de sorte que le code source est lisible? Merci. –

+0

vérifier ce lien: http://www.edumobile.org/iphone/iphone-programming-tutorials/mapkit-example-in-iphone/ –

Répondre

2

En règle générale, la classe qui se conforme au protocole MKAnnotation n'est pas le contrôleur de vue, il s'agit d'une classe de données.

Vous devrez créer une autre classe, que j'appellerai "MyLandmarks" pour l'exemple.

@interface MyLandmarks : NSObject <MKAnnotation> 
    // Normally, there'd be some variables that contain the name and location. 
    // And maybe some means to populate them from a URL or a database. 
    // This example hard codes everything. 

@end 


@implementation MyLandmarks 
-(NSString*)title { 
    return @"'ere I am, J.H."; 
} 

-(NSString*)subtitle { 
    return @"The ghost in the machine."; 
} 

-(CLLocationCoordinate2D) coordinate { 
    CLLocationCoordinate2D coord = {latitude: 19.120000, longitude: 73.020000}; 

    return coord; 
} 
@end 

Ensuite, quelque part appropriée dans votre MyMapView class add:

MyLandmark *landmark = [[[MyLandmark alloc]init]autorelease]; 
[Obj_Map_View addAnnotation:landmark]; 

Un couple autres bits que les autres développeurs Objective-C qui travaillent avec vous apprécierez:

  • Pour éviter toute confusion, n'appelle pas la classe MyMapView si elle descend d'un UIViewController. Appelez-le MyMapViewController, à la place.
  • Les classes commencent par une lettre majuscule, les variables commencent en minuscules. Les deux sont CamelCased. Obj_Map_View doit être objMapView.
+0

Merci John cela a fonctionné – Radix

0

Pour ajouter l'utilisation d'annotation: addAnnotation:

lire à ce sujet here