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?