地图视图相机标题的问题

use*_*428 8 mkmapview ios swift

我在设置我的订单/方式方面遇到问题UIMapView.这就是我想要发生的事情:

出现视图 - 地图旋转到指定的标题

点击重置按钮 - 如果用户移动了地图,它将重置为默认标题和缩放

当地图出现时,地图将旋转到标题,但重置按钮不执行任何操作.我怀疑这是我正在做的事情的顺序,因为如果我翻转两行代码,它可以工作,但是当地图出现时它不会旋转到正确的标题.

这是我的代码:

@IBAction func rotateToDefault(sender: AnyObject) {
    mapView.setRegion(zoomRegion, animated: true)
    mapView.camera.heading = parkPassed.orientation!
}

override func viewWillAppear(animated: Bool) {
    setUpMapView()
}

override func viewDidAppear(animated: Bool) {
    mapView.setRegion(zoomRegion, animated: true)
    mapView.camera.heading = parkPassed.orientation!
}

func setUpMapView() {
    rideArray = ((DataManager.sharedInstance.rideArray) as NSArray) as! [Ride]

    zoomRegion = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2D(latitude: parkPassed.latitude!, longitude: parkPassed.longitude!), 1000, 1000)
    mapView.setRegion(zoomRegion, animated: true)
    mapView.delegate = self

    for ride in rideArray {
        var subtitle = ""
        if locationManager.location == nil {
            subtitle = "Distance unavailable"
        } else {
            let userLocation = CLLocation(latitude: locationManager.location.coordinate.latitude, longitude: locationManager.location.coordinate.longitude)
            let annotationLocation = CLLocation(latitude: ride.latitude!, longitude: ride.longitude!)

            var distance = Int(CLLocationDistance(annotationLocation.distanceFromLocation(userLocation)))

            if distance > 1000 {
                distance = distance / 1000
                subtitle = "\(distance) kilometers"
            } else {
                subtitle = "\(distance) meters"
            }
        }

        let annotation = RideAnnotation(coordinate: CLLocationCoordinate2DMake(ride.latitude!, ride.longitude!), title: ride.name!, subtitle: subtitle)
        self.qTree.insertObject(annotation)
        annotationsAdded.insertObject(annotation, atIndex: 0)

        println(qTree.count)
    }
}
Run Code Online (Sandbox Code Playgroud)

有人有什么建议吗?

Ger*_*tan 9

我遇到了类似的问题.

看来区域和相机是两个相互排斥的概念,以确定您如何看待地图的哪个部分.

如果使用region,则可以使用坐标和范围来确定所看到的内容(您已在代码中执行此操作)

如果使用摄像头,则可以使用坐标,距离,俯仰和航向来确定您如何看到地图.

使用mapView.setCamera(...)可以平滑地更改您看到的内容,包括标题.

要定义相机视图,您可以执行类似的操作

let camera = MKMapCamera(lookingAtCenterCoordinate: userLocation, fromDistance: 1000, pitch: 0, heading: heading)
self.mapView.setCamera(camera, animated: false)
Run Code Online (Sandbox Code Playgroud)

从苹果文档:

将新摄像机分配给此属性会立即更新地图,而无需为更改设置动画.如果要为相机位置的更改设置动画,请改用setCamera:animated:方法.