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

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

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

РСшСниС

Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° MKDirections ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра calculateDirectionsWithCompletionHandler:, относящийся ΠΊ этому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π’Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Π° Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° MKDirectionsResponse. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠΌ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ направлСниях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π° устройствС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Maps (ΠšΠ°Ρ€Ρ‚Ρ‹). Π­Ρ‚ΠΎΠΌΡƒ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ вскорС научимся.

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

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° экранС направлСния, ΠΏΠΎΠ΄ΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΅Ρ…Π°Ρ‚ΡŒ ΠΊΡƒΠ΄Π°-Π»ΠΈΠ±ΠΎ. Но такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Maps (ΠšΠ°Ρ€Ρ‚Ρ‹). БоотвСтствСнно, Π²Ρ‹ Π½Π΅ смоТСтС Π½Π°Π½ΠΎΡΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚Ρƒ прямо Π² картографичСском Π²ΠΈΠ΄Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния. Бпособ указания Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Maps ΠΎΡ‡Π΅Π½ΡŒ прост. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° экранС Ρ‚Π°ΠΊΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ, потрСбуСтся ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ экзСмпляр класса MKDirections. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим классом Π½ΡƒΠΆΠ΅Π½ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ экзСмпляр MKDirectionsRequest.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для создания запроса Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляры MKMapItem. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠ΅ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅. Π‘ΡƒΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ²Π°: Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ направлСния, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ A Π² Ρ‚ΠΎΡ‡ΠΊΡƒ B, Ρ‚ΠΎ эти Ρ‚ΠΎΡ‡ΠΊΠΈ потрСбуСтся ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ элСмСнтов ΠΊΠ°Ρ€Ρ‚Ρ‹. На Π±Π°Π·Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± этих элСмСнтах создаСтся запрос, Π° Π·Π°Ρ‚Π΅ΠΌ для получСния Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс MKDirections. ПослС получСния Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ двумя способами.

β€’ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ направлСния ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. НапримСр, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Π΅Ρ…Π½ΠΈΠΊ, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π½Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅ (см. Ρ€Π°Π·Π΄Π΅Π» 9.4), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΡ€Π°Π²ΠΊΠΈ (ΠΈΡ… ΠΌΠ΅Ρ‚ΠΊΠΈ), располоТСнныС ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ A Π² Ρ‚ΠΎΡ‡ΠΊΡƒ B, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ эти Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°ΠΌΠΈ.

β€’ ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ направлСниях Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Maps (ΠšΠ°Ρ€Ρ‚Ρ‹) для отобраТСния.


Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ исслСдуСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π˜Ρ‚Π°ΠΊ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ направлСния ΠΏΡ€ΠΎΠ΅Π·Π΄Π° ΠΎΡ‚ Ρ‚ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сСйчас находимся, Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π·Π°Π΄Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ адрСс назначСния: Churchill Square Shopping Center, Brighton, United Kingdom (Π’ΠΎΡ€Π³ΠΎΠ²Ρ‹ΠΉ Ρ†Π΅Π½Ρ‚Ρ€ Β«Π§Π΅Ρ€Ρ‡ΠΈΠ»Π»ΡŒΒ», Π‘Ρ€Π°ΠΉΡ‚ΠΎΠ½, Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠ΅ королСвство). Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 9.7, ΠΌΡ‹ смоТСм ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ адрСс, Π²Ρ‹Ρ€Π°Π·ΠΈΠ² Π΅Π³ΠΎ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… ΡˆΠΈΡ€ΠΎΡ‚Ρ‹ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρ‹. Π—Π°Ρ‚Π΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ для создания экзСмпляра класса MKPlacemark β€” ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π² дальнСйшСм.

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ потрСбуСтся ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Core Location, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ смоТСм ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ адрСс Π² гСографичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (ΡˆΠΈΡ€ΠΎΡ‚Ρƒ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρƒ). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ MapKit, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ смоТСм ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ запрос направлСния. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ обСспСчиваСт LLVM, ΠΌΡ‹ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ эти Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:


#import Β«AppDelegate.hΒ»

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>


@implementation AppDelegate


<# ΠžΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ вашСго ΠΊΠΎΠ΄Π° находится здСсь #>


Π”Π°Π»Π΅Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 9.7, ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ адрСс Π² Π΄Π°Π½Π½Ρ‹Π΅ ΡˆΠΈΡ€ΠΎΡ‚Ρ‹ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρ‹:

β€” (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


NSString *destination = @"Churchill Square Shopping Center, \

Brighton, United Kingdom";


[[CLGeocoder new]

geocodeAddressString: destination

completionHandler: ^(NSArray *placemarks, NSError *error) {


<# Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ адрСса #>


}];


self.window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];

// Π’ΠΎΡ‡ΠΊΠ° пСрСопрСдСлСния для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки послС запуска прилоТСния.

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅, Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π±Π»ΠΎΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, относящСмся ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ geocodeAddressString: completionHandler: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ написанного Π½Π°ΠΌΠΈ класса CLGeocoder.

Π‘Π»ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ошибки. Π’Π°ΠΌ потрСбуСтся ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ошибки ΠΈ, Ссли ошибка вСрнСтся, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сообщим MapKit, Ρ‡Ρ‚ΠΎ Π² качСствС Ρ‚ΠΎΡ‡ΠΊΠΈ отсчСта всСх Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‚ ΠΏΡƒΠ½ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ сСйчас находимся. Для создания запроса Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ классом MKDirectionsRequest, Π° Π² качСствС значСния свойства source этого запроса Π·Π°Π΄Π°Π΄ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса mapItemForCurrentLocation (этот ΠΌΠ΅Ρ‚ΠΎΠ΄ относится ΠΊ классу MKMapItem):


if (error!= nil){

/* Π—Π΄Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠ² ΠΎΠΊΠ½ΠΎ с ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ */

return;

}


MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];

request.source = [MKMapItem mapItemForCurrentLocation];


Π Π°Π½Π΅Π΅ ΠΌΡ‹ создали строковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТался наш адрСс назначСния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ экзСмпляр CLPlacemark ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² экзСмпляр MKPlacemark, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ Π² запросС направлСния ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства Destination:


/* ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ назначСния CoreLocation Π² ΠΌΠ΅Ρ‚ΠΊΡƒ MapKit */


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ адрСса назначСния */

CLPlacemark *placemark = placemarks[0];

CLLocationCoordinate2D destinationCoordinates =

placemark.location.coordinate;

MKPlacemark *destination = [[MKPlacemark alloc]

initWithCoordinate: destinationCoordinates

addressDictionary: nil];


request.destination = [[MKMapItem alloc]

initWithPlacemark: destination];

Π’ классС MKDirectionsRequest Π΅ΡΡ‚ΡŒ свойство transportType, относящССся ΠΊ Ρ‚ΠΈΠΏΡƒ MKDirectionsTransportType:

typedef NS_OPTIONS(NSUInteger, MKDirectionsTransportType) {

MKDirectionsTransportTypeAutomobile = 1 << 0,

MKDirectionsTransportTypeWalking = 1 << 1,

MKDirectionsTransportTypeAny = 0x0FFFFFFF

} NS_ENUM_AVAILABLE(10_9, 7_0);


ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ направлСния ΠΏΡ€ΠΎΠ΅Π·Π΄Π° ΠΈΠ· исходной Ρ‚ΠΎΡ‡ΠΊΠΈ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ назначСния, Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ MKDirectionsTransportTypeAutomobile:


/* ΠœΡ‹ собираСмся ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ назначСния Π½Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ */

request.transportType = MKDirectionsTransportTypeAutomobile;


НаконСц, создаСм экзСмпляр класса MKDirections с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° initWithRequest:. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ экзСмпляр класса MKDirectionsRequest. ΠœΡ‹ ΡƒΠΆΠ΅ создали ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с элСмСнтом ΠΊΠ°Ρ€Ρ‚Ρ‹, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Ρ‚ΠΎΡ‡ΠΊΡƒ отправлСния ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ назначСния.

Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π² нашСм классС, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΌ направлСния, ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра calculateDirectionsWithCompletionHandler:. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ направлСния ΠΎΡ‚ исходной Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ назначСния. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π½Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° MKDirectionsResponse ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ‚ΠΈΠΏΠ° NSError (эта ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° Π»ΠΈ ошибка). Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½, Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹Ρ… свойства: source ΠΈ destination. Они Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ элСмСнтам ΠΊΠ°Ρ€Ρ‚Ρ‹ (Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ Ρ€Π°Π½Π΅Π΅. Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ Π² этом Π±Π»ΠΎΠΊΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ просто Π²Π·ΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ назначСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ объяснялось), Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Maps (ΠšΠ°Ρ€Ρ‚Ρ‹) для отобраТСния, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ направлСния */

MKDirections *directions = [[MKDirections alloc]

initWithRequest: request];


[directions calculateDirectionsWithCompletionHandler:

^(MKDirectionsResponse *response, NSError *error) {


/* ΠœΠΎΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ синтаксичСский Ρ€Π°Π·Π±ΠΎΡ€ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°, Π½ΠΎ Π·Π΄Π΅ΡΡŒ ΠΌΡ‹

поступим ΠΈΠ½Π°Ρ‡Π΅ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Maps (ΠšΠ°Ρ€Ρ‚Ρ‹) Π΄Π»Ρ отобраТСния

Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π΅ΠΊ. Π”Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² API Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ

Ρ€Π°Π½Π΅Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ элСмСнты ΠΊΠ°Ρ€Ρ‚Ρ‹. ΠΠΎ здСсь Π²Ρ‹Π·ΠΎΠ² дСлаСтся

Π² дСмонстрационных цСлях. ΠœΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ΅ с направлСниями

содСрТится Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ информация ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… */


/* ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ направлСния Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Maps */

[MKMapItem

openMapsWithItems:@[response.source, response.destination]

launchOptions:@{

MKLaunchOptionsDirectionsModeKey:

MKLaunchOptionsDirectionsModeDriving}];

}];

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ вСсь написанный ΠΊΠΎΠ΄, ΠΎΠ½ получится довольно ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ:

#import Β«AppDelegate.hΒ»

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>


@implementation AppDelegate


β€” (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


NSString *destination = <# Place your destination address here #>;


[[CLGeocoder new]

geocodeAddressString: destination

completionHandler: ^(NSArray *placemarks, NSError *error) {

if (error!= nil){

/* Π—Π΄Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠ² ΠΎΠΊΠ½ΠΎ