iPhone: создание MKAnnotation

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

Идеи?


person Nic Hubbard    schedule 21.05.2010    source источник


Ответы (3)


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];

Если у вас нет заголовка и подзаголовка в выноске аннотации, вам необходимо добавить свойства заголовка и подзаголовка.

person RedBlueThing    schedule 21.05.2010
comment
Это как раз то, что мне нужно. Куда бы я поместил координату - (id) initWithCoordinate: (CLLocationCoordinate2D); метод? В моем файле .h или .m? - person Nic Hubbard; 21.05.2010
comment
Без проблем. Я обновил ответ более подробно :) - person RedBlueThing; 21.05.2010
comment
По какой-то причине я не получаю никакого метода '-initWithCoord:', когда пытаюсь собрать и запустить. - person Nic Hubbard; 21.05.2010
comment
Прости. Мой пример кода был initWithCoord, он должен быть initWithCoordinate. - person RedBlueThing; 21.05.2010
comment
Как добавить изображение для аннотации? - person Nilesh Tupe; 05.10.2011
comment
@NileshTupe Проверьте этот вопрос: stackoverflow.com/questions/1185611/ - person RedBlueThing; 05.10.2011
comment
Весь смысл протоколов (и интерфейсов в Java) состоит в том, чтобы вы могли обращаться с вещами как с другими вещами. Так что создавать класс MyAnnotation даже в примере - не очень хорошо. Все, что вы помещаете на карту, должно быть объектом домена, например, Рестораном. Затем у вас есть этот доменный класс, реализующий этот протокол, а затем вы отображаете на него это позиционируемое поведение. - person Rob; 16.12.2012

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

person joshrl    schedule 24.06.2010
comment
Это очень удобно, если вам нужны только базовые аннотации. Спасибо! - person radven; 03.02.2012
comment
MKPointAnnotation * pointAnnotation = [[выделение MKPointAnnotation] инициализация]; pointAnnotation.coordinate = location.coordinate; [mkMapView addAnnotation: pointAnnotation]; - person Dickey Singh; 21.06.2013

Проверьте проект Apple MapCallouts. Все, что вам нужно, находится в этом файле: http://developer.apple.com/iphone/library/samplecode/MapCallouts/Introduction/Intro.html.

person alecnash    schedule 03.06.2010
comment
Да так много, именно то, что я искал. - person Elise van Looij; 16.01.2011