Нахавандипур Вандад
Шрифт:
[self.view addSubview: self.myMapView];
/* Это просто один образец местоположения. */
CLLocationCoordinate2D location;
location.latitude = 50.8219 16929 07181;
location.longitude = -0.13 81176 71012 87842;
/* Создаем аннотацию, используя информацию о местоположении. */
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 <MKAnnotation>)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;
}