• Отправить информацию о направлениях в приложение Maps (Карты) для отображения.
В данном разделе мы исследуем второй вариант. Итак, предположим, что мы хотим показать
Итак, начнем. Первым делом потребуется импортировать фреймворк Core Location, с помощью которого мы сможем преобразовать вышеупомянутый адрес в географические координаты (широту и долготу). Кроме того, импортируем фреймворк MapKit, с помощью которого сможем создать запрос направления. При помощи модулей, работу с которыми обеспечивает LLVM, мы без труда импортируем эти фреймворки в приложение:
#import «AppDelegate.h»
#import
#import
@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]