Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

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 setCanShowCallout: YES];

}

/* Теперь (независимо от того, использовали мы многоразовый маркер

или создали новый) убеждаемся, что цвет маркера совпадает с цветом

аннотации. */

annotationView.pinColor = senderAnnotation.pinColor;

result = annotationView;

return result;

}

При многократном использовании аннотирующего вида ему присваивается идентификатор (строка NSString). Определяя, маркер какого типа вы хотели бы отобразить на карте, и задавая уникальный идентификатор для маркера каждого типа (например, к одному типу могут относиться красные маркеры, а к другому — синие), следует многократно использовать маркеры нужного типа, применяя метод экземпляра dequeueReusableAnnotationViewWithIdentifier:, относящийся к классу MKMapView. Это показано в следующем коде.

Мы запрограммировали механизм получения уникальных идентификаторов каждого маркера в собственном классе MyAnnotation. Вот. h-файл класса MyAnnotation:

#import <Foundation/Foundation.h>

#import <MapKit/MapKit.h>

/* Это стандартные цвета меток, присутствующие в SDK. Мы задаем уникальные

идентификаторы для каждого маркера в соответствии с его цветом, чтобы

позже можно было снова использовать созданные ранее маркеры в связи

с тем же цветом, для которого они создавались. */

extern NSString *const kReusablePinRed;

extern NSString *const kReusablePinGreen;

extern NSString *const kReusablePinPurple;

@interface MyAnnotation: NSObject <MKAnnotation>

/* 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;

Поделиться:
Популярные книги

Жизнь коротка

Желязны Роджер Джозеф
Классика мировой фантастики
Фантастика:
социально-философская фантастика
научная фантастика
боевая фантастика
космическая фантастика
7.33
рейтинг книги
Жизнь коротка

Я все еще не царь. Книга XXVI

Дрейк Сириус
26. Дорогой барон!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Я все еще не царь. Книга XXVI

Матабар III

Клеванский Кирилл Сергеевич
3. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар III

Путь

Yagger Егор
Фантастика:
космическая фантастика
4.25
рейтинг книги
Путь

Лекарь Империи 10

Карелин Сергей Витальевич
10. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 10

Почем цветочек аленький?

Луганцева Татьяна Игоревна
Женщина-цунами
Детективы:
иронические детективы
7.88
рейтинг книги
Почем цветочек аленький?

Тринадцатый IV

NikL
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Тринадцатый IV

Товарищ "Чума" 6

lanpirot
6. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 6

Кондотьер

Листратов Валерий
7. Ушедший Род
Фантастика:
фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Кондотьер

Орден Архитекторов 9

Винокуров Юрий
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Орден Архитекторов 9

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Черный Маг Императора 26

Герда Александр
26. Черный маг императора
Фантастика:
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 26

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Древесный маг Орловского княжества 4

Павлов Игорь Васильевич
4. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 4