Книга: iOS. Приемы программирования
Обсуждение
Обсуждение
Как было рассказано в подразделе «Решение» данного раздела, нам следует создать объект, соответствующий протоколу MKAnnotation, а позже инстанцировать этот объект и передать ему карту для отображения. h-файл этого объекта будет записываться так:
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface MyAnnotation: NSObject <MKAnnotation>
@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 <MapKit/MapKit.h>
@interface ViewController () <MKMapViewDelegate>
@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. Интегрированный в систему стандартный маркер, отображенный на карте