/ Swift

Woring With Maps (Перевод). Часть первая

Фреймворк MapKit предоставляет APIs для разработчиков, чтобы работать с картами:
отображать карты, перемещаться по карте, добавлять аннотации для определенных
мест, добавлять пометки на существующих картах и т.д.

С помощью этого фреймворка можно встроить полнофункциональный интерфейс карты
в ваше приложение, без какого-либо кодирования. В прошивке 9 или более поздней
версии фреймворк MapKit позволяет разработчикам предоставлять настройки
транзита и поддержки.

Ссылка на стартовый проект.

Мы с вами рассмотрим некоторые из этих функций. В частности, вы узнаете кое-что о фреймворке:

  1. Как вставлять карту в колонтитул таблицы;
  2. Как перевести адреса в координаты, используя Geocoder;
  3. Как добавить и настроить шрифт(т.е. аннотацию) на карте;
  4. Как настроить аннотацию.

Чтобы дать вам более полное представление о MapKit, мы добавим
карту в приложение FoodPin. После изменения, приложение отобразит карту. Когда
пользователь вводит адрес ресторана, то пин укажет местоположение его на карте.

Круто, не так ли? Это будет весело. Давайте начнем.

Использование MapKit Framework

По умолчанию структура MapKit не поставляется в проекте Xcode. Для того,
чтобы использовать его, вы должны сначала добавить его и связать его в вашем проекте.
Вам не нужно делать это вручную. Xcode имеет раздел функциональных возможностей,
что позволяет настроить фреймворки для различных технологий Apple,
такие как MapKit и ICloud.

В навигаторе проекта выберите проект, а затем выберите проект в пункте Target.
После этого вы можете включить Maps в разделе Capabilities. Просто
сдвиньте переключатель в положение ON, и Xcode автоматически настроит
ваш проект для использования MapKit.

Скриншот подключение MapKit

Добавление интерфейса Map в ваше приложение

То, что мы собираемся сделать, это добавить не интерактивную карту в нижний
колонтитул таблицы в экране "Подробно о ресторане". Когда пользователь нажимает
на карту, приложение переходит к экрану показать полную карту местоположения ресторана.

Экраны с финальным функционалом

Теперь откройте Main.Storyboard и перетащите карту из библиотеки объектов в
конец таблицы на экран RestaurantDetailViewController. После добавления карты,
он должен появиться прямо под ячейкой.

Добавление map в таблицу

Выберите карту и измените её размер, чтобы сделать её немного больше. Вы можете
установить ее высоту во вкладке Size inspector до 135 пунктов.

Установка размеров для карты

Вид карты предоставляет различные варианты, такие как масштабирование и прокрутка
для настройки функции карты. В Interface Builder выберите вид карты,
и вы можете редактировать параметры, перейдя в инспектор атрибутов.

Доступные настройки карты

Я знаю вы не можете ждать, чтобы проверить изменения. Давайте нажмем на
кнопку Run, чтобы запустить приложение. При выборе ресторана вы перейдете к
детальному виду, но интерфейс не изменится. Где же наша карта?

В предыдущей главе мы написали строчку кода, чтобы очистить колонтитул таблицы.
Вот почему карта не отображается должным образом. Теперь переходим
к RestaurantDetailViewController.swift и удаляем следующую строку
кода в методе viewDidLoad():

tableView.tableFooterView = UIView(frame: CGRect.zero)

После того, как вы сделали это, приложение должно отображать карту в
таблице колонтитула. Круто, не так ли? Это сила MapKit. Не написав ни
одной строки кода, вы уже вставили карту в ваше приложении, хотя отображается
карта по умолчанию.

Отображение карты при билде приложения

После этого, давайте реализуем интерфейс полного экрана карты.

Для получения полного экрана с картой, мы реализуем его в виде отдельного ViewControllera.
Таким образом, перетащите ViewController из библиотеки объектов на наш Storyboard.
Измените размер карты, чтобы карта заполнила весь экран ViewControllera,
и затем кликните "Resolve Auto Layout Issues" > "Add Missing Constraints",
чтобы добавить необходимые ограничения объекта.

Вид карты в storyboard

Логика экрана с полной карты, когда пользователь нажимает на не интерактивную карту в
колонтитуле таблицы, его перебрасывает на экран с полной картой, для этого мы должны
создать Seque между контроллерами.

Теперь, удерживая клавишу Control, перетащите из Restaurant Detail View Controller
на новый контроллер с картой, чтобы создать seque. В появившемся меню, выберите Show
в качестве типа Seque. Для созданного Segue установите идентификатор showMap
внутри атрибут инспектора.

Установка идентификатора

Вы можете задаться вопросом, почему мы не создали Seque картой в колонтитуле таблицы
и ViewController с картой. Вид верхнего и нижнего колонтитула таблицы не выбирается.
Таким образом, мы не можем перетащить удерживая клавишу Control из карты в таблице
на ViewController с картой. В этом случае мы создали Seque между контролерами.
В дальнейшем мы будем инициировать переход программно.

Как уже говорилось, карта в колонтитуле таблицы не может обнаружить нажатие по умолчанию.
Мы должны реализовать собственное решение для обнаружения нажатия. В IOS SDK
предоставляет набор жестов для распознания общих жестов, таких как касание.
Мы будем использовать класс с именем UITapGestureRecognizer для обработки нажатия.

На этом первая часть перевода заканчивается.

Продолжение в следующей части перевода.
Ссылка на вторую часть. Ссылка на третью часть.

Перевод главы из книги: Beginning iOS 10 Programming with Swift 3

Автор книги: Simon Ng