идентификаторы для каждого маркера в соответствии с его цветом, чтобы
позже можно было снова использовать созданные ранее маркеры в связи
с тем же цветом, для которого они создавались. */
extern NSString *const kReusablePinRed;
extern NSString *const kReusablePinGreen;
extern NSString *const kReusablePinPurple;
@interface MyAnnotation: NSObject
/* unsafe_unretained, так как это не объект. Этот шаг можно пропустить
и оставить принятие этого решения компилятору. weak или strong
не сработают, так как это не объект. */
@property (nonatomic, unsafe_unretained, readonly)
CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
/* unsafe_unretained по той же причине, что и для свойства coordinate */
@property (nonatomic, unsafe_unretained) MKPinAnnotationColor pinColor;
— (instancetype)initWithCoordinates:(CLLocationCoordinate2D)paramCoordinates
title:(NSString*)paramTitle
subTitle:(NSString*)paramSubTitle;
+ (NSString *) reusableIdentifierforPinColor
:(MKPinAnnotationColor)paramColor;
@end
Аннотация не то же самое, что аннотирующий вид. Аннотация — это место, которое вы хотите указать на карте, а аннотирующий вид — это визуальное представление, в котором эта аннотация всплывает над картой (то есть вид). Класс MyAnnotation соответствует аннотации, а не аннотирующему виду. Когда мы создаем аннотацию путем инстанцирования класса MyAnnotation, мы можем присвоить ей цвет, задействовав определенное и реализованное нами же свойство pinColor. Когда картографический вид должен будет отобразить аннотацию, картографический вид вызовет метод делегата mapView: viewForAnnotation: и запросит у этого делегата аннотирующий вид. В параметре forAnnotation данного метода сообщается аннотация, которую необходимо отобразить. Получая ссылку на аннотацию, мы можем привести тип аннотации к экземпляру MyAnnotation, получить ее свойство pinColor и, основываясь на этих данных, создать экземпляр класса MKPinAnnotationView. У этого экземпляра будет информация о заданном цвете маркера, которую мы вернем картографическому виду.
Вот. m-файл MyAnnotation:
#import «MyAnnotation.h»
NSString *const kReusablePinRed = @"Red";
NSString *const kReusablePinGreen = @"Green";
NSString *const kReusablePinPurple = @"Purple";
@implementation MyAnnotation
+ (NSString *) reusableIdentifierforPinColor
:(MKPinAnnotationColor)paramColor{
NSString *result = nil;
switch (paramColor){
case MKPinAnnotationColorRed:{
result = REUSABLE_PIN_RED;
break;
}
case MKPinAnnotationColorGreen:{
result = REUSABLE_PIN_GREEN;
break;
}
case MKPinAnnotationColorPurple:{
result = REUSABLE_PIN_PURPLE;
break;
}
}
return result;
}
— (instancetype)initWithCoordinates:(CLLocationCoordinate2D)paramCoordinates
title:(NSString*)paramTitle
subTitle:(NSString*)paramSubTitle{
self = [super init];
if (self!= nil){
_coordinate = paramCoordinates;
_title = paramTitle;
_subtitle = paramSubTitle;
_pinColor = MKPinAnnotationColorGreen;
}
return self;
}
@end
Выполнив реализацию класса MyAnnotation, его нужно задействовать в приложении (в данном примере мы воспользуемся контроллером вида). Вот верхняя часть файла реализации контроллера вида: