2016-01-09 131 views
0

我在Swift中使用MapKit时出现问题。我希望它以特定坐标为中心,但默认中心根本不会改变。我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) 
} 

位置参数是中心点。该地区将根据regionRadius的距离设置南北和东西跨度 - 您将其设置为1000米(1公里),这比半英里多一点。然后在这里使用regionRadius * 2.0,因为这适用于在JSON文件中绘制公共图稿数据。 setRegion告诉mapView显示区域。地图视图使用整齐的缩放动画自动将当前视图转换到所需的区域,无需额外的代码! 回到viewDidLoad,以下行添加到该方法的末尾:

centerMapOnLocation(initialLocation) 

这将调用辅助方法放大到initialLocation上启动。 生成并运行应用程序,现在应该放大到威基基的心脏:]

字体:http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial

0

有FUNC的时候地图是在使用中被自动调用。其中之一是

FUNC mapViewDidFinishLoadingMap(MapView类:的MKMapView)

尝试这样做。

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

如果这不起作用型FUNC的MapView,并期待在列表中,找到一个你认为可能,但我觉得这是它必须这样做。