Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 90

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>


И всС. Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ Core Location ΠΈ Map Kit окаТутся Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

9.1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ картографичСского Π²ΠΈΠ΄Π°

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

НСобходимо ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ Π² экранном Π²ΠΈΠ΄Π΅.

РСшСниС

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ экзСмпляр класса MKMapView, послС Ρ‡Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ ΠΊ Π²ΠΈΠ΄Ρƒ Π»ΠΈΠ±ΠΎ присвойтС ΠΏΠΎΠ΄Π²ΠΈΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° вашСго Π²ΠΈΠ΄Π°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. h-Ρ„Π°ΠΉΠ»Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ создаСтся экзСмпляр MKMapView, послС Ρ‡Π΅Π³ΠΎ этот Π²ΠΈΠ΄ отобраТаСтся Π² полноэкранном Ρ€Π΅ΠΆΠΈΠΌΠ΅:


#import <UIKit/UIKit.h>

#import <MapKit/MapKit.h>


@interface ViewController ()

@property (nonatomic, strong) MKMapView *myMapView;

@end


@implementation ViewController


Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²ΠΈΠ΄Π°, содСрТащий ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ MKMapView. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π° (.m-Ρ„Π°ΠΉΠ»Π΅) ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌ для Π½Π΅Π΅ Ρ‚ΠΈΠΏ Satellite:


β€” (void)viewDidLoad{

[super viewDidLoad];


self.view.backgroundColor = [UIColor whiteColor];


self.myMapView = [[MKMapView alloc]

initWithFrame: self.view.bounds];

/* Π—Π°Π΄Π°Π΅ΠΌ Satellite Π² качСствС Ρ‚ΠΈΠΏΠ° ΠΊΠ°Ρ€Ρ‚Ρ‹. */

self.myMapView.mapType = MKMapTypeSatellite;

self.myMapView.autoresizingMask =

UIViewAutoresizingFlexibleWidth |

UIViewAutoresizingFlexibleHeight;


/* Π”обавляСм ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π²ΠΈΠ΄Ρƒ. */

[self.view addSubview: self.myMapView];


}

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса MKMapView довольно Π»Π΅Π³ΠΊΠΎ. МоТно просто ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Ρ€Π°ΠΌΠΊΡƒ, воспользовавшись Π΅Π³ΠΎ ΠΆΠ΅ конструктором, Π° послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠ°Ρ€Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ создана, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Π² качСствС ΠΏΠΎΠ΄Π²ΠΈΠ΄Π° ΠΊ Π²ΠΈΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ отобраТаСтся Π½Π° экранС. И всС, ΠΌΡ‹ смоТСм ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ.

MKMapView β€” это подкласс UIView. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ картографичСским Π²ΠΈΠ΄ΠΎΠΌ Ρ‚Π΅ΠΌ ΠΆΠ΅ способом, ΠΊΠ°ΠΊΠΈΠΌ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с экзСмпляром UIView. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ свойством UIView для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄ Π΅Π³ΠΎ свойство backgroundColor.

Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΡƒΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ класса MKMapView Π΅ΡΡ‚ΡŒ свойство ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ mapType, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ Ρ‚ΠΈΠΏ ΠΊΠ°Ρ€Ρ‚Ρ‹. ΠšΠ°Ρ€Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ спутниковой, стандартной ΠΈΠ»ΠΈ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎΠΉ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ спутникового Ρ‚ΠΈΠΏΠ° (рис. 9.1).


Рис. 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, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π»ΠΈ Π½Π° устройствС Π³Π΅ΠΎΠ»ΠΎΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ слуТбы.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠΌ 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]){