2016-01-09 3 views
0

У меня проблема с моим MapKit в Swift. Я хочу, чтобы он сосредоточился на определенной координате, но центр по умолчанию не изменился вообще. Первая (и самая важная часть) мой файл viewController.swift выглядит следующим образом:MapKit не находится в нужном месте

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»?

+0

Почему ваш код перед viewDidLoad? Также вы можете обновить вопрос с изображением mapview – Katz

+0

, вероятно, вы должны называть свой код в ViewDidAppear(), потому что вы будете знать, что у вас есть местоположение пользователя – Lamar

ответ

0

В 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) 
} 

Аргумент расположение является центральной точкой. В регионе будут располагаться отрезки с севера на юг и восток-запад, исходя из расстояния региона Радиус - вы устанавливаете его на 1000 метров (1 километр), что составляет чуть более половины мили. Затем вы используете regionRadius * 2.0, потому что это хорошо работает для построения общих данных об искусстве в файле JSON. setRegion сообщает mapView, чтобы отобразить регион. Карта автоматически переводит текущее представление в желаемую область с помощью аккуратной анимации масштабирования без необходимости использования дополнительного кода! Назад в viewDidLoad, добавьте следующую строку в конец метода:

centerMapOnLocation(initialLocation) 

Это будет вызывать вспомогательный метод для увеличения в initialLocation при запуске. Построить и запустить приложение, и теперь он должен приближать к сердцу Waikiki:]

Шрифт: http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial

0

Есть функ-х, которые вызываются автоматически, когда карта используется. Одним из них является

функ mapViewDidFinishLoadingMap (MAPview: MKMapView)

Попробуйте сделать это.

func mapViewDidFinishLoadingMap(mapView: MKMapView) { 
    map.setRegion(mapRegion, animated: true) 
} 

Если это не работает, типа Func MAPview и посмотреть в списке и найти тот, который вы думаете, может, но я чувствую, что это, где это должно быть.

Смежные вопросы