iphone objective-c mkannotation

iphone - MKAnnotation, ejemplo simple



objective-c (1)

Necesitas 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

Luego, donde creas el mapa al que llamarás:

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

EDITAR:

Aquí está 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.

¿Hay un proyecto de ejemplo simple para MKAnnotation ? No sé qué pasar en " addAnnotation ", ya que quiere algunos " id<Annotation> ". Los ejemplos en el sitio del desarrollador son todos con arreglos o analizadores o algo así, solo necesito un ejemplo muy fácil de entender primero, cómo funciona todo esto.

Gracias por adelantado..

EDITAR:

Establecí un Pin clase. En la .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

De acuerdo a lo que onnoweb respondió.

En el Pin.m, implementé así, 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 configuro las coordenadas a mano, como se indica en el comentario, funciona. Pero me gustaría poder establecer el valor dinámicamente como en el primer comentario. Lo intenté de varias maneras, pero ninguna funcionó. Como no especifica una - (CLLocationCoordinate2D) coordinate , intenté sintetizar solo una coordinate , pero así tampoco funcionará.

¿Podrías mostrarme tu MapPin.m ?

EDIT 2:

Configuré 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 con eso?