Читаем iOS. Приемы программирования полностью

/* Создаем аннотацию, используя информацию о местоположении. */

MyAnnotation *annotation =

[[MyAnnotation alloc] initWithCoordinates: location

title:@"My Title"

subTitle:@"My Sub Title"];


annotation.pinColor = MKPinAnnotationColorPurple;


/* И наконец, добавляем аннотацию на карту. */

[self.myMapView addAnnotation: annotation];


}


Результат проделанной работы показан на рис. 9.3.


Рис. 9.3. Маркер альтернативного цвета, отображенный в картографическом виде

9.6. Отображение пользовательских маркеров в картографическом виде

Постановка задачи

Вместо стандартных маркеров, присутствующих в iOS SDK, требуется использовать на карте в таком качестве наши собственные изображения.

Решение

Загружаем произвольное изображение в экземпляр класса UIImage и присваиваем этот экземпляр свойству image экземпляра MKAnnotationView. В результате выбранное нами изображение возвращается карте в виде маркера:


— (MKAnnotationView *)mapView:(MKMapView *)mapView

viewForAnnotation:(id )annotation{


MKAnnotationView *result = nil;


if ([annotation isKindOfClass: [MyAnnotation class]] == NO){

return result;

}

}


if ([mapView isEqual: self.myMapView] == NO){

/* Мы собираемся обработать это событие только для того Map View,

который создали ранее. */

return result;

}


/* Сначала приводим тип той аннотации, для которой этот Map View

запустил данное сообщение делегата. */

MyAnnotation *senderAnnotation = (MyAnnotation *)annotation;


/* С помощью метода класса, определенного в нашем собственном

классе аннотаций, попытаемся сделать многоразовый идентификатор

для того маркера, который сейчас создаем. */

NSString *pinReusableIdentifier =

[MyAnnotation

reusableIdentifierforPinColor: senderAnnotation.pinColor];


/* Пользуясь идентификатором, полученным ранее, попытаемся повторно

применить маркер в отправляющем Map View. */

MKPinAnnotationView *annotationView = (MKPinAnnotationView *)

[mapView

dequeueReusableAnnotationViewWithIdentifier:

pinReusableIdentifier];


if (annotationView == nil){

/* Если нам не удастся повторно использовать имеющийся маркер,

создадим новый. */

annotationView =

[[MKPinAnnotationView alloc] initWithAnnotation: senderAnnotation

reuseIdentifier: pinReusableIdentifier];


/* Убеждаемся, что видны выноски поверх каждого маркера в случае,

если мы присвоили каждому маркеру заголовок и/или подзаголовок. */

annotationView.canShowCallout = YES;

}


UIImage *pinImage = [UIImage imageNamed:@"BluePin.png"];

if (pinImage!= nil){

annotationView.image = pinImage;

}


result = annotationView;


return result;

}


В данном коде отображаем картинку под названием BluePin.png (в пакете нашего приложения) для любого маркера, который ставится на карте. Определение реализации класса MyAnnotation приводится в разделе 9.5.

Обсуждение

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже