#ios #swift #mkmapview #mapkit #mkmapviewdelegate
#iOS #swift #mkmapview #mapkit #mkmapviewdelegate
Вопрос:
В моем Storyboard
Swift
приложении у меня есть UIViewController
с MKMapView
растянутым до каждого края экрана. Мне было достаточно импортировать a MapKit
, затем я настроил делегат:
class MyClass: MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad(){
super.viewDidLoad()
mapView.delegate = self
}
}
а затем, когда я запустил приложение, я увидел карту, расположенную по центру над моей страной.
Я хочу реализовать функцию, которая работает следующим образом:
когда пользователь открывает это представление, он видит карту, но с центром в месте рядом с моей родной страной, тогда карта может автоматически прокручиваться до центра моей родной страны. Это вообще достижимо?
Например, если бы я жил в США и открыл карту, я бы увидел Тихий океан, а затем карта прокрутилась, чтобы показать мне территорию США.
Комментарии:
1. Вы можете настроить карту так, как вам нравится. Вы можете показать любое место при любом уровне масштабирования. Или вы можете показать место, где находится пользователь (если пользователь дает разрешение).
2. Хорошо, но есть ли возможность каким-то образом вычислить место рядом с моей страной, а затем прокрутить оттуда до исходного положения?
3. Конечно. Вы можете показать любую широту / долготу, которые вам нравятся, и вы можете прокручивать в любое другое место, которое вам нравится.
Ответ №1:
Конечно, это возможно. У MKMapView есть метод setRegion(_:animated:)
.
Вы можете установить для региона карты точку в Тихом океане, подождать несколько секунд (с помощью таймера или dispatch_after
), а затем вызвать setRegion(_:animated:)
, чтобы переместить карту в центр вашего текущего местоположения.
Комментарии:
1. Спасибо, Дункан, всего два дополнительных вопроса — заданный регион, конечно, будет работать, но он будет прокручиваться до моего местоположения очень быстро — есть ли способ — вместо того, чтобы откладывать его с помощью dispatch_after — кодировать его, чтобы сама прокрутка была плавной и медленной? Я имею в виду, что если первым регионом является Тихий океан, то он будет прокручиваться до территории США, например, за 3-5 секунд, медленно показывая все остальное по пути?
2. Насколько я знаю, нет. Возможно, серия вызовов setRegion с задержками между ними. Однако это было бы хрупким, потому что при задержке загрузки содержимого карты оно не будет работать правильно.