ios - 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
}
}
解决方案
推荐阅读
- javascript - 如何检查环境是否支持扩展构建,如 Array
- python - tkinter:在父级中显示的顶层框架
- python - 将工作 Python 脚本转换为 EXE (Python) 后出错
- smarty - 使用 first 和 last 属性时,为什么我的嵌套 IF 在 Smarty 中不起作用?
- javascript - 为什么 setTimeout 函数最后执行?
- oauth - OpenID 与 OAuth
- php - PHP中的FTP被动模式
- java - 使用 SWT Graphics 在另一个图像上绘制动态透明图像
- .htaccess - 用于规范化大小写的 Apache 重写规则
- javascript - 如何从父元素获取弹出窗口的链接?