我在Swift中的MapKit有问题。我希望它以特定的坐标为中心,但默认的中心不会改变。我的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"未更改地图中心的原因是什么?
在使用映射时会自动调用一些函数。其中之一是
函数映射视图DidFinishLoadingMap(映射视图: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)
}
location参数是中心点。根据regionRadius的距离,该区域将有南北和东西跨度——您将其设置为1000米(1公里),也就是半英里多一点。然后在这里使用regionRadius*2.0,因为它可以很好地在JSON文件中绘制公共艺术品数据。setRegion命令mapView显示区域。地图视图通过整洁的缩放动画自动将当前视图转换到所需区域,不需要额外的代码!回到viewDidLoad
,在方法末尾添加以下行:
centerMapOnLocation(initialLocation)
这将在启动时调用helper方法来放大initialLocation
。构建并运行该应用程序,现在它应该放大到威基基的核心:]
字体:http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial
Swift 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)
}
}