2011-06-27 16 views
15

¿Hay un proyecto de ejemplo simple para MKAnnotation? No sé qué pasar en "addAnnotation", ya que quiere un poco de "id<Annotation>". Los ejemplos en el sitio del desarrollador son todos con matrices o analizadores sintácticos o más, solo necesito un ejemplo muy fácil para comprender primero, cómo funciona todo.MKAnnotación, ejemplo simple

Gracias de antemano ..

EDIT:

he creado una clase Pin. En .h, escribe

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

@interface Pin : NSObject <MKAnnotation> { 
CLLocationCoordinate2D coordinate; 
NSString *title; 
NSString *subTitle; 
} 

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 
@property (nonatomic, readonly) NSString *title; 
@property (nonatomic, readonly) NSString *subTitle; 

- (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:(NSString *)placeName description:(NSString *)description; 
@end 

según lo que onnoweb haya respondido.

En el Pin.m, he implementado de esta manera, de acuerdo con diferentes ejemplos:

#import "Pin.h" 

@implementation Pin 

@synthesize title, subTitle; 

- (CLLocationCoordinate2D) coordinate { 
CLLocationCoordinate2D coords; 
coords.latitude = coordinate.latitude; //i want it that way 
coords.longitude = 7.1352260; //this way it works 

return coords; 

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

- (NSString *) subtitle { 
return @"Thats the sub"; 
} 

- (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:(NSString *)placeName description:(NSString *)description { 

return self; 
} 

- (void) dealloc { 
[super dealloc]; 
} 

@end 

Así que si fijo las coordenadas manualmente, como se señaló en el comentario, funciona. Pero me gustaría poder establecer el valor dinámicamente como en el primer comentario. Intenté varias maneras, pero ninguna funcionó. Como no especificas un - (CLLocationCoordinate2D) coordinate intenté sintetizar coordinate, pero tampoco funcionará.

¿Podría mostrarme su MapPin.m?

EDIT 2:

que establece mapCenter como

- (void)viewWillAppear:(BOOL)animated { 
self.locationManager = [[CLLocationManager alloc] init]; 
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
self.locationManager.delegate = self; 
[self.locationManager startUpdatingLocation]; 

CLLocation *curPos = locationManager.location; 
location = curPos.coordinate; 

CLLocationCoordinate2D mapCenter; 
mapCenter.latitude = location.latitude; 
mapCenter.longitude = location.longitude; 

MKCoordinateSpan mapSpan; 
mapSpan.latitudeDelta = 0.005; 
mapSpan.longitudeDelta = 0.005; 

MKCoordinateRegion mapRegion; 
mapRegion.center = mapCenter; 
mapRegion.span = mapSpan; 

mapKitView.region = mapRegion; 
mapKitView.mapType = MKMapTypeStandard; 
mapKitView.showsUserLocation=TRUE; 
} 

algo malo en eso?

Respuesta

34

Necesita tener una clase implementando el protocolo MKAnnotation. Aquí hay un fragmento de uno de mis proyectos:

@interface MapPin : NSObject<MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 
} 

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 
@property (nonatomic, readonly) NSString *title; 
@property (nonatomic, readonly) NSString *subtitle; 

- (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:(NSString *)placeName description:(NSString *)description; 

@end 

Entonces, donde se crea el mapa que vas a llamar:

pin = [[MapPin alloc] initWithCoordinates:[track startCoordinates] placeName:@"Start" description:@""]; 
[map addAnnotation:pin]; 

EDIT:

aquí es la implementación:

@implementation MapPin 

@synthesize coordinate; 
@synthesize title; 
@synthesize subtitle; 

- (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:placeName description:description { 
    self = [super init]; 
    if (self != nil) { 
     coordinate = location; 
     title = placeName; 
     [title retain]; 
     subtitle = description; 
     [subtitle retain]; 
    } 
    return self; 
} 

- (void)dealloc { 
    [title release]; 
    [subtitle release]; 
    [super dealloc]; 
} 


@end 

Espero que esto ayude, Onno.

+0

Gracias, eso ya ayudó bastante. Me gusta saber a qué googlear, y lo puse en marcha, pero no lo entiendo del todo. Por favor vea mi pregunta actualizada para el código que tengo hasta ahora. No sé cómo debería verse .m. – Nareille

+0

Ver mi respuesta editada. – onnoweb

+0

Gracias, eso ayudó de nuevo :) Una última pregunta para un comportamiento extraño: no defino algo como "coordinar" en mi .h, pero Xcode me dice que necesito sintetizarlo. Si lo hago, mi mapCenter se desplaza unos cientos de metros hacia el oeste. Si supero la sintetización, se centra correctamente de nuevo. ¿Cómo deshacerse de la advertencia? – Nareille