6. Инстанцируйте класс MyAnnotation и добавьте его к вашей карте с помощью метода addAnnotation:, относящегося к классу MKMapView.
Как было рассказано в подразделе «Решение» данного раздела, нам следует создать объект, соответствующий протоколу MKAnnotation, а позже инстанцировать этот объект и передать ему карту для отображения. h-файл этого объекта будет записываться так:
#import
#import
@interface MyAnnotation: NSObject
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy, readonly) NSString *title;
@property (nonatomic, copy, readonly) NSString *subtitle;
— (instancetype)initWithCoordinates:(CLLocationCoordinate2D)paramCoordinates
title:(NSString *)paramTitle
subTitle:(NSString *)paramSubTitle;
@end
В.m-файле класса MyAnnotation мы создаем класс, отвечающий за отображение геолокационной информации, и делаем это следующим образом:
#import «MyAnnotation.h»
@implementation MyAnnotation
— (instancetype)initWithCoordinates:(CLLocationCoordinate2D)paramCoordinates
title:(NSString *)paramTitle
subTitle:(NSString *)paramSubTitle{
self = [super init];
if (self!= nil){
coordinate = paramCoordinates;
title = paramTitle;
subtitle = paramSubTitle;
}
return(self);
}
@end
Позже мы инстанцируем этот класс и добавим его к нашей карте, например к. m-файлу того контроллера вида, который создает и отображает картографический вид:
#import «ViewController.h»
#import «MyAnnotation.h»
#import
@interface ViewController ()
@property (nonatomic, strong) MKMapView *myMapView;
@end
@implementation ViewController
— (void)viewDidLoad {
[super viewDidLoad];
/* Создаем карту такого же размера, как и наш вид. */
self.myMapView = [[MKMapView alloc]
initWithFrame: self.view.bounds];
self.myMapView.delegate = self;
/* Задаем для карты тип Standard. */
self.myMapView.mapType = MKMapTypeStandard;
self.myMapView.autoresizingMask =
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight;
/* Добавляем ее к нашему виду. */
[self.view addSubview: self.myMapView];
/* Это просто один образец местоположения. */
CLLocationCoordinate2D location =
CLLocationCoordinate2DMake(50.8219 16929 07181, -0.13 81176 71012 87842);
/* Создаем аннотацию, используя информацию о местоположении. */
MyAnnotation *annotation =
[[MyAnnotation alloc] initWithCoordinates: location
title:@"My Title"
subTitle:@"My Sub Title"];
/* И наконец, добавляем аннотацию на карту. */
[self.myMapView addAnnotation: annotation];
@end
На рис. 9.2 показан вывод данной программы в симуляторе iPhone.
Рис. 9.2.Интегрированный в систему стандартный маркер, отображенный на карте
9.5. Отображение разноцветных маркеров в картографическом виде
По умолчанию маркеры-индикаторы, которыми отмечаются точки на карте, — красного цвета. Необходимо отображать маркеры различных цветов, а не только стандартного красного.
Возвращайте вашему картографическому виду экземпляры MKPinAnnotationView. Это делается с помощью метода делегата mapView: viewForAnnotation:.
Каждая аннотация, добавляемая к экземпляру MKMapView, соответствует конкретному виду, который отображается поверх картографического вида. Такие всплывающие виды называются аннотирующими (Annotation Views).
Аннотирующий вид — это объект типа MKAnnotationView, он является подклассом от UIView. Если объект делегата картографического вида реализует метод делегата mapView: viewForAnnotation:, то объект делегата должен будет возвращать экземпляры класса MKAnnotationView, чтобы отображать (а при необходимости — настраивать) аннотирующие виды, которые выводятся поверх картографического вида.
Чтобы обеспечить в нашей программе возможность настройки цвета меток (цвет будем выбирать из стандартной палитры, предусмотренной для меток в SDK), которые ставятся на картографическом виде для представления аннотаций, нам понадобится возвращать в методе делегата mapView: viewForAnnotation: не экземпляр класса MKAnnotationView, а экземпляр класса MKPinAnnotationView. Не забывайте, что класс MKPinAnnotationView является подклассом 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;
Читать дальше
Конец ознакомительного отрывка
Купить книгу