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

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

Жанры

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

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

Шрифт:

[self.view addSubview: self.myMapView];

/* Это просто один образец местоположения. */

CLLocationCoordinate2D location;

location.latitude = 50.8219 16929 07181;

location.longitude = -0.13 81176 71012 87842;

/* Создаем аннотацию, используя информацию о местоположении. */

MyAnnotation *annotation =

[[MyAnnotation alloc] initWithCoordinates: location

title:@"My Title"

subTitle:@"My Sub Title"];

annotation.pinColor = MKPinAnnotationColorPurple;

/* И
наконец, добавляем аннотацию на карту. */

[self.myMapView addAnnotation: annotation];

}

Результат проделанной работы показан на рис. 9.3.

Рис. 9.3. Маркер альтернативного цвета, отображенный в картографическом виде

9.6. Отображение пользовательских маркеров в картографическом виде

Постановка задачи

Вместо стандартных маркеров, присутствующих в iOS SDK, требуется использовать на карте в таком качестве наши собственные изображения.

Решение

Загружаем произвольное изображение в экземпляр класса UIImage и присваиваем этот экземпляр свойству image экземпляра MKAnnotationView. В результате выбранное нами изображение возвращается карте в виде маркера:

— (MKAnnotationView *)mapView:(MKMapView *)mapView

viewForAnnotation:(id <MKAnnotation>)annotation{

MKAnnotationView *result = nil;

if ([annotation isKindOfClass: [MyAnnotation class]] == NO){

return result;

}

}

if ([mapView isEqual: self.myMapView] == NO){

/* Мы собираемся обработать это событие только для того Map View,

который создали ранее. */

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.canShowCallout = YES;

}

UIImage *pinImage = [UIImage imageNamed:@"BluePin.png"];

if (pinImage!= nil){

annotationView.image = pinImage;

}

result = annotationView;

return result;

}

В данном коде отображаем картинку под названием BluePin.png (в пакете нашего приложения) для любого маркера, который ставится на карте. Определение реализации класса MyAnnotation приводится в разделе 9.5.

Обсуждение

Объект делегата, относящийся к классу MKMapView, должен соответствовать протоколу MKMapViewDelegate и реализовывать метод mapView: viewForAnnotation:. Возвращаемое значение этого метода является экземпляром класса MKAnnotationView. Любой объект, являющийся подклассом вышеупомянутого класса, по умолчанию наследует свойство image. Если присвоить этому свойству такое значение, то мы заменим стандартное значение, предоставляемое во фреймворке Map Kit. Результат показан на рис. 9.4.

Рис. 9.4. Наше собственное изображение, показанное в картографическом виде

См. также

Раздел 9.5.

9.7. Преобразование обычных адресов в данные широты и долготы

Постановка задачи

Имеется адрес определенного места, необходимо найти его географические координаты (широту и долготу).

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

Отцы-основатели. Весь Саймак - 7.Игра в цивилизацию

Саймак Клиффорд Дональд
7. Отцы-основатели. Весь Саймак
Фантастика:
научная фантастика
5.00
рейтинг книги
Отцы-основатели. Весь Саймак - 7.Игра в цивилизацию

Обратная сторона пути

Панкеева Оксана Петровна
11. Хроники странного королевства
Фантастика:
фэнтези
9.55
рейтинг книги
Обратная сторона пути

Государство и революции

Шамбаров Валерий Евгеньевич
Научно-образовательная:
история
7.86
рейтинг книги
Государство и революции

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

Том 5. Преступление и наказание

Достоевский Федор Михайлович
5. Собрание сочинений в пятнадцати томах
Проза:
русская классическая проза
7.92
рейтинг книги
Том 5. Преступление и наказание

Город

Загорцев Андрей Владимирович
Проза:
военная проза
8.75
рейтинг книги
Город

Тайна двух океанов (илл. Г.Шевякова)

Адамов Григорий Борисович
Фантастика:
научная фантастика
8.50
рейтинг книги
Тайна двух океанов (илл. Г.Шевякова)

Фантастика 1967

Булычев Кир
Фантастика
Фантастика:
научная фантастика
5.00
рейтинг книги
Фантастика 1967

Приключения Тома Сойера. Приключения Гекльберри Финна

Твен Марк
12. Библиотека приключений
Детские:
детские приключения
9.48
рейтинг книги
Приключения Тома Сойера. Приключения Гекльберри Финна

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Телохранитель Генсека. Том 1

Ложная память

Кунц Дин Рей
37. Книга-загадка, книга-мистика
Детективы:
триллеры
8.36
рейтинг книги
Ложная память

Дважды одаренный. Том VIII

Тарс Элиан
8. Дважды одаренный
Фантастика:
боевая фантастика
альтернативная история
аниме
попаданцы
5.40
рейтинг книги
Дважды одаренный. Том VIII

Сказание о белых камнях

Голицын Сергей Михайлович
Приключения:
исторические приключения
5.00
рейтинг книги
Сказание о белых камнях

Мы друг друга не выбирали

Кистяева Марина
1. Мы выбираем...
Любовные романы:
остросюжетные любовные романы
прочие любовные романы
современные любовные романы
5.00
рейтинг книги
Мы друг друга не выбирали