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

на главную

Жанры

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

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

Шрифт:

Рис. 9.1. Вид карты, выполненной со спутника

Можно изменить визуальное представление карты определенного типа, воспользовавшись свойством mapType экземпляра MKMapView. Это свойство может принимать следующие значения:

• MKMapTypeStandard — применяется для отображения стандартной карты (задается по умолчанию);

• MKMapTypeSatellite — позволяет отобразить вид карты, выполненной со спутника (как

показано на рис. 9.1);

• MKMapTypeHybrid — дает возможность накладывать стандартную карту на спутниковую.

9.2. Обработка событий картографического вида

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

Необходимо обрабатывать различные события, которые картографический вид может посылать своему делегату.

Решение

Присвойте объект делегата, соответствующий протоколу MKMapViewDelegate, свойству delegate, которое относится к экземпляру класса MKMapView:

— (void)viewDidLoad{

[super viewDidLoad];

/* Создаем карту размером с наш вид. */

self.myMapView = [[MKMapView alloc]

initWithFrame: self.view.bounds];

/* Задаем Satellite в качестве типа карты. */

self.myMapView.mapType = MKMapTypeSatellite;

self.myMapView.delegate = self;

self.myMapView.autoresizingMask =

UIViewAutoresizingFlexibleWidth |

UIViewAutoresizingFlexibleHeight;

/* Добавляем карту к нашему виду. */

[self.view addSubview: self.myMapView];

}

Этот код легко запустить в методе viewDidLoad, относящемся к объекту контроллера вида, если объект имеет свойство MapView типа MKMapView:

#import <UIKit/UIKit.h>

#import <MapKit/MapKit.h>

@interface ViewController <MKMapViewDelegate>

@property (nonatomic, strong) MKMapView *myMapView;

@end

@implementation ViewController

Обсуждение

Объект, являющийся делегатом экземпляра класса MKMapView, должен реализовывать методы, описанные в протоколе MKMapViewDelegate. Эти методы необходимы для получения различных сообщений от картографического вида и, как будет показано позднее, для предоставления информации картографическому виду. В протоколе MKMapViewDelegate определяются различные методы, в том числе метод mapViewWillStartLoadingMap:, вызываемый в объекте делегата всякий раз, когда начинается процесс загрузки карты. Не забывайте, что делегат для картографического вида не является обязательным

объектом, то есть картографические виды можно создавать и не присваивая им делегатов. Просто картографические виды, лишенные делегатов, не будут реагировать на действия пользователя.

Вот список некоторых методов, объявляемых в протоколе MKMapViewDelegate (здесь также рассказано, о чем они должны сообщать объекту-делегату экземпляра MKMapView):

• mapViewWillStartLoadingMap: — вызывается применительно к объекту делегата всякий раз, когда картографический вид начинает загружать данные, обеспечивающие визуальное представление карты пользователю;

• mapView: viewForAnnotation: — вызывается применительно к объекту делегата всякий раз, когда картографический вид требует от экземпляра MKAnnotationView снабдить карту визуальными аннотациями. Подробнее об этом механизме будет рассказано в разделе 9.4;

• mapViewWillStartLocatingUser: — как понятно из названия, метод вызывается применительно к объекту делегата всякий раз, когда картографический вид приступает к определению местоположения пользователя. Подробнее о том, как сделать это, будет рассказано в разделе 9.3;

• mapView: regionDidChangeAnimated: — вызывается применительно к объекту делегата всякий раз, когда изменяется регион, отображаемый на карте.

См. также

Разделы 9.3 и 9.4.

9.3. Отметка местоположения устройства

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

Необходимо найти широту и долготу той точки, в которой находится устройство.

Решение

Воспользуйтесь классом CLLocationManager:

— (void)viewDidLoad {

[super viewDidLoad];

if ([CLLocationManager locationServicesEnabled]){

self.myLocationManager = [[CLLocationManager alloc] init];

self.myLocationManager.delegate = self;

[self.myLocationManager startUpdatingLocation];

} else {

/* Геолокационные службы не активизированы.

Попробуйте исправить ситуацию: например предложите пользователю

включить геолокационные службы. */

NSLog(@"Location services are not enabled");

}

}

В данном коде myLocationManager — это свойство типа CLLocationManager. В приведенном примере кода данный класс также является делегатом диспетчера местоположения (Location Manager).

Обсуждение

Фреймворк Core Location, входящий в состав комплекта SDK, предоставляет программисту функционал, который позволяет определять актуальное положение устройства с системой iOS в пространстве. Поскольку в iOS пользователь может отключать определение местоположения в разделе Settings (Настройки), то мы перед тем, как инстанцировать объект типа CLLocationManager, проверим, работают ли на устройстве геолокационные службы.

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

Прозрение

Ефимов Виктор Алексеевич
Документальная литература:
публицистика
5.00
рейтинг книги
Прозрение

Гримуар темного лорда VIII

Грехов Тимофей
8. Гримуар темного лорда
Фантастика:
боевая фантастика
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.25
рейтинг книги
Гримуар темного лорда VIII

Испекли мы каравай (сборник)

Нестерова Наталья Владимировна
Любовные романы:
современные любовные романы
8.69
рейтинг книги
Испекли мы каравай (сборник)

Дхаммапада. Путь будды. Том 1

Раджниш Бхагаван Шри
Религия и эзотерика:
самосовершенствование
5.00
рейтинг книги
Дхаммапада. Путь будды. Том 1

Асана, пранаяма, мудра, бандха

Сарасвати Свами Сатьянанда
Дом и Семья:
здоровье и красота
8.33
рейтинг книги
Асана, пранаяма, мудра, бандха

Газлайтер. Том 9

Володин Григорий Григорьевич
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9

Секс в кино и литературе

Бейлькин Михаил Меерович
Научно-образовательная:
психология
6.00
рейтинг книги
Секс в кино и литературе

Пожиратель Душ

Орлов Антон
Фантастика:
боевая фантастика
8.12
рейтинг книги
Пожиратель Душ

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

Тарс Элиан
3. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
юмористическое фэнтези
5.50
рейтинг книги
Дважды одаренный. Том III

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Имперец. Том 5

Романов Михаил Яковлевич
4. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Имперец. Том 5

Крещение огнем. Звезда пленительного риска

Калашников Максим
Фантастика:
альтернативная история
4.80
рейтинг книги
Крещение огнем. Звезда пленительного риска

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

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

Спящий во тьме

Барлоу Джеффри
1. Северные огни
Фантастика:
детективная фантастика
альтернативная история
4.33
рейтинг книги
Спящий во тьме