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

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

Жанры

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, проверим, работают ли на устройстве геолокационные службы.

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

Вернувшийся: Корпорация. Том III

Vector
3. Вернувшийся
Фантастика:
космическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Корпорация. Том III

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4

Поводырь

Щепетнов Евгений Владимирович
3. Ботаник
Фантастика:
фэнтези
6.17
рейтинг книги
Поводырь

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

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

Последний Герой. Том 2

Дамиров Рафаэль
2. Последний герой
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Последний Герой. Том 2

Изгой Проклятого Клана. Том 2

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

Цикл романов "Целитель". Компиляция. Книги 1-17

Большаков Валерий Петрович
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цикл романов Целитель. Компиляция. Книги 1-17

Я спас СССР! том 1

Вязовский Алексей
1. Я спас СССР
Фантастика:
альтернативная история
6.57
рейтинг книги
Я спас СССР! том 1

На границе империй. Том 10. Часть 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 6

Эпоха Опустошителя. Том II

Павлов Вел
2. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том II

Я не царь. Книга XXIV

Дрейк Сириус
24. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я не царь. Книга XXIV

Сопротивление

Осадчук Алексей Витальевич
11. Последняя жизнь
Фантастика:
аниме
фэнтези
попаданцы
7.33
рейтинг книги
Сопротивление

Катализ

Скаландис Ант
Фантастика:
научная фантастика
5.00
рейтинг книги
Катализ

Зодчий. Книга III

Погуляй Юрий Александрович
3. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Зодчий. Книга III