首页 > 解决方案 > Google Map 上的平滑移动标记在 Swift 3 中不起作用

问题描述

我在谷歌地图上放置了汽车标记,以便顺利移动到目的地位置。在这里我可以旋转标记,但它没有移动到目的地。任何人都可以用下面的代码识别什么是代码吗?

override func viewDidLoad() {
    super.viewDidLoad()
    let centerCoordinate = CLLocationCoordinate2DMake((self.delegate?.userLocation?.coordinate.latitude)!, (self.delegate?.userLocation?.coordinate.longitude)!)
    self.setUpDriverMarkerWithNewLocation(location: centerCoordinate)
}

func setUpDriverMarkerWithNewLocation(location : CLLocationCoordinate2D) {

    self.sourceMarker.icon = UIImage(named:  "ARCar")
    let centerCoordinate = CLLocationCoordinate2DMake(13.02025636601701, 80.26621352881193)
    self.sourceMarker.groundAnchor = CGPoint(x: CGFloat(0.5), y: CGFloat(0.5))
    self.sourceMarker.rotation = CLLocationDegrees(getHeadingForDirection(fromCoordinate: centerCoordinate, toCoordinate: location))
    self.sourceMarker.position = location
    self.sourceMarker.map = self.rideMapView
    CATransaction.begin()
    CATransaction.setValue(Int(2.0), forKey: kCATransactionAnimationDuration)
    CATransaction.setCompletionBlock({() -> Void in
        self.sourceMarker.groundAnchor = CGPoint(x: CGFloat(0.5), y: CGFloat(0.5))
        self.sourceMarker.rotation = self.rotation

    })
    self.sourceMarker.position = centerCoordinate
    //this can be new position after car moved from old position to new position with animation
    self.sourceMarker.map = self.rideMapView
    self.sourceMarker.groundAnchor = CGPoint(x: CGFloat(0.5), y: CGFloat(0.5))
    self.sourceMarker.rotation = CLLocationDegrees(getHeadingForDirection(fromCoordinate: centerCoordinate, toCoordinate: location))
    CATransaction.commit()
}


func getHeadingForDirection(fromCoordinate fromLoc: CLLocationCoordinate2D, toCoordinate toLoc: CLLocationCoordinate2D) -> Float {

    let fLat: Float = Float((fromLoc.latitude).degreesToRadians)
    let fLng: Float = Float((fromLoc.longitude).degreesToRadians)
    let tLat: Float = Float((toLoc.latitude).degreesToRadians)
    let tLng: Float = Float((toLoc.longitude).degreesToRadians)
    let degree: Float = (atan2(sin(tLng - fLng) * cos(tLat), cos(fLat) * sin(tLat) - sin(fLat) * cos(tLat) * cos(tLng - fLng))).radiansToDegrees
    if degree >= 0 {
        return degree - 180.0
    }
    else {
        return 360 + degree - 180
    }
}

标签: iosswiftswift3

解决方案


推荐阅读