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

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

Жанры

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

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

Шрифт:

Объект, являющийся делегатом CLLocationManager, должен соответствовать протоколу CLLocationManagerDelegate.

Вот как мы объявим объект нашего диспетчера местоположения в. h-файле контроллера вида (создавать экземпляр CLLocationManager может и объект, не являющийся контроллером вида):

#import <UIKit/UIKit.h>

#import <CoreLocation/CoreLocation.h>

@interface ViewController <CLLocationManagerDelegate>

@property (nonatomic, strong) CLLocationManager *myLocationManager;

@end

@implementation ViewController

Контроллер нашего вида будет иметь следующую реализацию:

— (void)locationManager:(CLLocationManager *)manager

didUpdateToLocation:(CLLocation *)newLocation

fromLocation:(CLLocation *)oldLocation{

/* Получена информация о новом местоположении. */

NSLog(@"Latitude = %f", newLocation.coordinate.latitude);

NSLog(@"Longitude = %f", newLocation.coordinate.longitude);

}

— (void)locationManager:(CLLocationManager *)manager

didFailWithError:(NSError *)error{

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

}

— (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");

}

}

Метод экземпляра startUpdateLocation, относящийся к классу CLLocationManager, сообщает делегату о том, удалось или нет получить информацию о местоположении пользователя. Это делается с помощью методов location Manager: didUpdateToLocation: fromLocation: и locationManager: didFailWithError: объекта делегата, именно в таком порядке.

9.4. Отображение маркеров в картографическом виде

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

Необходимо указать пользователю конкретное место на карте.

Решение

Воспользуйтесь встроенными аннотациями для картографических видов. Для этого выполните следующие шаги.

1. Создайте новый класс и назовите его MyAnnotation.

2. Убедитесь, что этот класс соответствует протоколу MKAnnotation.

3. Определите свойство типа CLLocationCoordinate2D для этого класса и назовите данное свойство coordinate. Убедитесь, что задали это свойство как readonly (только для чтения), поскольку свойство coordinate в соответствии с протоколом MKAnnotation определяется как readonly.

4. Далее можно (но не обязательно) определить два свойства типа NSString, а именно title и subtitle, которые могут содержать заголовок и подзаголовок вашего аннотирующего вида. Оба этих свойства также будут readonly.

5. Создайте для вашего класса метод-инициализатор. Этот метод будет принимать параметр типа CLLocationCoordinate2D. В этом методе присвойте переданный параметр местоположения тому свойству, которое мы определили на этапе 3. Поскольку это свойство является readonly, его невозможно присвоить с помощью кода вне области видимости данного класса. Следовательно, инициализатор этого класса действует здесь как перемычка и позволяет опосредованно присваивать значение этому свойству. Такие же операции мы осуществим со свойствами title и subtitle.

6. Инстанцируйте класс MyAnnotation и добавьте его к вашей карте с помощью метода addAnnotation:, относящегося к классу MKMapView.

Обсуждение

Как было рассказано в подразделе «Решение» данного раздела, нам следует создать объект, соответствующий протоколу MKAnnotation, а позже инстанцировать этот объект и передать ему карту для отображения. h-файл этого объекта будет записываться так:

#import <Foundation/Foundation.h>

#import <MapKit/MapKit.h>

@interface MyAnnotation: NSObject <MKAnnotation>

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

@property (nonatomic, copy, readonly) NSString *title;

@property (nonatomic, copy, readonly) NSString *subtitle;

— (instancetype)initWithCoordinates:(CLLocationCoordinate2D)paramCoordinates

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

Кодекс Крови. Книга ХVIII

Борзых М.
18. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVIII

Герой

Мазин Александр Владимирович
4. Варяг
Фантастика:
альтернативная история
9.10
рейтинг книги
Герой

Изгой Проклятого Клана

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

Дерзкие побеги

Нестерова Дарья Владимировна
Документальная литература:
прочая документальная литература
5.00
рейтинг книги
Дерзкие побеги

Развод в 45. От любви до ненависти

Гофман Крис
6. Развод
Любовные романы:
остросюжетные любовные романы
5.40
рейтинг книги
Развод в 45. От любви до ненависти

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

Винокуров Юрий
35. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXV

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

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

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

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

Моров. Том 3

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

Бастард Императора. Том 14

Орлов Андрей Юрьевич
14. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 14

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Неучтенный элемент. Том 7

NikL
7. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 7

Попаданец на рыбалке. Книги 1-7

Скворцов Владимир Николаевич
Попаданец на рыбалке
Фантастика:
фэнтези
попаданцы
6.88
рейтинг книги
Попаданец на рыбалке. Книги 1-7

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

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