MapKit не находится в правильном месте
У меня проблема с моим MapKit в Swift. Я хочу, чтобы он центрировался на определенной координате, но центр по умолчанию не меняется вообще. Первая (и самая важная часть) моего файла viewController.swift выглядит так:
import UIKit
import Parse
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
var map : MKMapView! = MKMapView()
var locManager:CLLocationManager!
@IBOutlet var txtUsername: UITextField!
@IBOutlet var txtPassword: UITextField!
override func viewDidLoad() {
var centerCoordinate = CLLocationCoordinate2DMake(41.8796677, -87.6198131)
var mapSpan = MKCoordinateSpanMake(0.01, 0.01)
var mapRegion = MKCoordinateRegionMake(centerCoordinate, mapSpan)
self.map.setRegion(mapRegion, animated: true)
locManager = CLLocationManager()
locManager.delegate = self
locManager.desiredAccuracy = kCLLocationAccuracyBest
locManager.requestAlwaysAuthorization()
map.showsUserLocation = true
super.viewDidLoad()
}
В чем может быть причина того, что центр карты не изменяется переменной centerCoordinate?
2 ответа
Есть функции, которые вызываются автоматически, когда карта используется. Один из них является
func mapViewDidFinishLoadingMap(mapView: MKMapView)
Попробуйте сделать это.
func mapViewDidFinishLoadingMap(mapView: MKMapView) {
map.setRegion(mapRegion, animated: true)
}
Если это не работает, наберите func mapView, посмотрите в списке и найдите тот, который, по вашему мнению, мог бы, но я чувствую, что это именно то, что нужно.
В ViewController.swift найдите viewDidLoad и добавьте следующее в конец метода:
// set initial location in Honolulu
let initialLocation = CLLocation(latitude: 21.282778, longitude: -157.829444)
Вы будете использовать это, чтобы установить начальные координаты вида карты в точку в Гонолулу. Когда вы пытаетесь указать карте, что отображать, вы не можете просто указать широту и долготу. Этого достаточно, чтобы центрировать карту, но вам нужно указать прямоугольную область для отображения, чтобы получить правильный уровень масштабирования. Добавьте в класс следующий константный и вспомогательный метод:
let regionRadius: CLLocationDistance = 1000
func centerMapOnLocation(location: CLLocation) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
regionRadius * 2.0, regionRadius * 2.0)
mapView.setRegion(coordinateRegion, animated: true)
}
Аргумент местоположения является центральной точкой. Область будет иметь интервалы между севером, югом и востоком и западом в зависимости от расстояния regionRadius - вы устанавливаете это значение в 1000 метров (1 километр), что составляет чуть больше половины мили. Затем вы используете regionRadius * 2.0 здесь, потому что это хорошо работает для вывода общедоступных графических данных в файл JSON.
setRegion сообщает mapView для отображения региона. Вид карты автоматически переводит текущий вид в нужную область с аккуратной анимацией масштабирования, без необходимости в дополнительном коде! Вернуться в viewDidLoad
добавьте следующую строку в конец метода:
centerMapOnLocation(initialLocation)
Это вызовет вспомогательный метод для увеличения initialLocation
на старте. Создайте и запустите приложение, и теперь оно должно приблизиться к сердцу Waikiki:]
Шрифт: http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial
Свифт 5.
в
MKMapViewDelegate
, Рекомендую использовать
regionDidChangeAnimated
метод и установка региона
mapView
на основе координаты пользователя. Измените диапазон в соответствии с вашим вариантом использования.
extension MapViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
mapView.setRegion(MKCoordinateRegion(center: userLocation.coordinate, span: MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1)), animated: true)
}
}