2010-05-21 6 views
14

Могу ли я создать MKAnnotation, или это только для чтения? У меня есть координаты, но мне нелегко вручную создать MKAnnotation с использованием setCoordinate.iPhone: Создать MKAnnotation

Идеи?

ответ

40

MKAnnotation - это протокол. Поэтому вам нужно написать свой собственный объект аннотации, который реализует этот протокол. Таким образом, ваш заголовок MyAnnotation выглядит следующим образом:

@interface MyAnnotation : NSObject<MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
} 

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 

// add an init method so you can set the coordinate property on startup 
- (id) initWithCoordinate:(CLLocationCoordinate2D)coord; 

и ваша реализация выглядит (MyAnnotation.m):

- (id) initWithCoordinate:(CLLocationCoordinate2D)coord 
{ 
    coordinate = coord; 
    return self; 
} 

Так, чтобы добавить аннотацию к карте:

MyAnnotation * annotation = [[[MyAnnotation alloc] initWithCoordinate:coordinate] autorelease]; 
[self.mapView addAnnotation:annotation]; 

Если вы wan't заголовок и субтитры в выноске аннотации, вам нужно добавить свойства заголовка и субтитров.

+0

Это то, что мне нужно. Где бы я поставил координату - (id) initWithCoordinate: (CLLocationCoordinate2D); метод? В моем файле .h или .m? –

+0

Нет проблем. Я уточнил ответ с некоторыми подробностями :) – RedBlueThing

+0

По какой-то причине я не получаю метод «-initWithCoord:», обнаруженный при попытке создания и запуска. –

32

В iPhone OS 4 есть новый класс MKPointAnnotation, который представляет собой конкретную реализацию протокола MKAnnotation.

+0

Спасибо за указание на это joshrl –

+1

Это очень удобно, если вам нужны только основные аннотации. Благодаря! – radven

+4

MKPointAnnotation * pointAnnotation = [[MKPointAnnotation alloc] init]; pointAnnotation.coordinate = location.coordinate; [mkMapView addAnnotation: pointAnnation]; –

Смежные вопросы