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

Как было рассказано в подразделе «Решение» данного раздела, нам следует создать объект, соответствующий протоколу 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).

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