SlideShare a Scribd company logo
iOS Internship 2014
Карты и навигация
лекция 12
Карты и навигация
Map Kit framework
Core Location framework
Карты и навигация
MapKit предоставляет абстракцию для отображения карты, аннотаций
и дополнительных меток, регионов, маршрутов. Начиная с iOS 6 Apple
использует свой движок и данные, до этого использовались Google
Mobile Maps.
Основные классы и протоколы:
● MKMapView
● MKAnnotation
● MKAnnotationView
MapKit framework
Карты и навигация
Показываем карту с центром в заданных координатах:
@property (strong, nonatomic) MKMapView *mapView;
//...
- (void)viewDidLoad
{
//...
self.mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.mapView];
self.mapView.region = (MKCoordinateRegion) {
(CLLocationCoordinate2D) {28.6, 77.2},
(MKCoordinateSpan) {0.2, 0.2}
};
}
MKMapView
Карты и навигация
Параметры для кастомизации вида и поведения карты:
● @property(nonatomic) MKMapType mapType
● @property(nonatomic) BOOL zoomEnabled
● @property(nonatomic) BOOL scrollEnabled
● @property(nonatomic) BOOL showsUserLocation
● @property(nonatomic) MKUserTrackingMode userTrackingMode
● @property(nonatomic) BOOL showsPointsOfInterest;
● ...
MKMapView
Карты и навигация
Показываем стандартный пин:
@interface PinAnnotation : NSObject <MKAnnotation>
@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy, readwrite) NSString *title;
@end
//...
PinAnnotation *annotation = [[PinAnnotation alloc] init];
annotation.coordinate = (CLLocationCoordinate2D) {28.6, 77.2};
annotation.title = @"New Delhi";
[self.mapView addAnnotation:annotation];
MKMapView
Карты и навигация
MKMapView
Показываем кастомный пин:
self.mapView.delegate = self;
//...
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id<MKAnnotation>)annotation
{
static NSString *const kAnnotationViewID = @"MyAnnotation";
MKAnnotationView *view =
[mapView dequeueReusableAnnotationViewWithIdentifier:kAnnotationViewID];
if (view == nil) {
view = [[MKAnnotationView alloc] initWithFrame:(CGRect) {0, 0, 20, 20}];
//...
}
view.annotation = annotation;
return view;
}
Карты и навигация
CLLocationManager
CLLocationManager позволяет:
● Определять координаты и направление.
● Получать уведомления о значительном перемещении.
● Получать уведомления о входе в заданный регион и выходе из него.
Ограничения и возможности:
● Можно указать желаемую точность определения координат, что при продолжительной
работе влияет на энергопотребление.
● Уведомления могут быть получены в background-режиме (Пока пользователь явно не
убьёт приложение).
● Пользователь может запретить получение координат для нашего приложения.
Карты и навигация
CLLocationManager
Следим за текущими координатами с помощью CLLocationManager так:
//...
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
//...
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
CLLocation *location = locations.lastObject;
[self.locationTracker addLocation:location];
}

More Related Content

More from Noveo

Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
Noveo
 
Yii2
Yii2Yii2
Yii2
Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
Noveo
 
PHP basic
PHP basicPHP basic
PHP basic
Noveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
Noveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
Noveo
 
MySQL
MySQLMySQL
MySQL
Noveo
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
Noveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
Noveo
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
Noveo
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
Noveo
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
Noveo
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
Noveo
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
Noveo
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Noveo
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Noveo
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)
Noveo
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
Noveo
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
Noveo
 

More from Noveo (20)

Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
 

карты, навигация

  • 1. iOS Internship 2014 Карты и навигация
  • 2. лекция 12 Карты и навигация Map Kit framework Core Location framework
  • 3. Карты и навигация MapKit предоставляет абстракцию для отображения карты, аннотаций и дополнительных меток, регионов, маршрутов. Начиная с iOS 6 Apple использует свой движок и данные, до этого использовались Google Mobile Maps. Основные классы и протоколы: ● MKMapView ● MKAnnotation ● MKAnnotationView MapKit framework
  • 4. Карты и навигация Показываем карту с центром в заданных координатах: @property (strong, nonatomic) MKMapView *mapView; //... - (void)viewDidLoad { //... self.mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:self.mapView]; self.mapView.region = (MKCoordinateRegion) { (CLLocationCoordinate2D) {28.6, 77.2}, (MKCoordinateSpan) {0.2, 0.2} }; } MKMapView
  • 5. Карты и навигация Параметры для кастомизации вида и поведения карты: ● @property(nonatomic) MKMapType mapType ● @property(nonatomic) BOOL zoomEnabled ● @property(nonatomic) BOOL scrollEnabled ● @property(nonatomic) BOOL showsUserLocation ● @property(nonatomic) MKUserTrackingMode userTrackingMode ● @property(nonatomic) BOOL showsPointsOfInterest; ● ... MKMapView
  • 6. Карты и навигация Показываем стандартный пин: @interface PinAnnotation : NSObject <MKAnnotation> @property (nonatomic, readwrite) CLLocationCoordinate2D coordinate; @property (nonatomic, copy, readwrite) NSString *title; @end //... PinAnnotation *annotation = [[PinAnnotation alloc] init]; annotation.coordinate = (CLLocationCoordinate2D) {28.6, 77.2}; annotation.title = @"New Delhi"; [self.mapView addAnnotation:annotation]; MKMapView
  • 7. Карты и навигация MKMapView Показываем кастомный пин: self.mapView.delegate = self; //... - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { static NSString *const kAnnotationViewID = @"MyAnnotation"; MKAnnotationView *view = [mapView dequeueReusableAnnotationViewWithIdentifier:kAnnotationViewID]; if (view == nil) { view = [[MKAnnotationView alloc] initWithFrame:(CGRect) {0, 0, 20, 20}]; //... } view.annotation = annotation; return view; }
  • 8. Карты и навигация CLLocationManager CLLocationManager позволяет: ● Определять координаты и направление. ● Получать уведомления о значительном перемещении. ● Получать уведомления о входе в заданный регион и выходе из него. Ограничения и возможности: ● Можно указать желаемую точность определения координат, что при продолжительной работе влияет на энергопотребление. ● Уведомления могут быть получены в background-режиме (Пока пользователь явно не убьёт приложение). ● Пользователь может запретить получение координат для нашего приложения.
  • 9. Карты и навигация CLLocationManager Следим за текущими координатами с помощью CLLocationManager так: //... self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; [self.locationManager startUpdatingLocation]; //... - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *location = locations.lastObject; [self.locationTracker addLocation:location]; }