答案 0 :(得分:7)
假设您对标记的引用为mainMarker
GMSMarker
对象
var mainMarker:GMSMarker?
假设这是你在没有动画的情况下改变标记位置的功能
func changeMarkerWithoutAnimation() {
mainMarker?.map = nil
mainMarker = nil
let changedPosition = CLLocationCoordinate2DMake(22.9734, 78.6569)
mainMarker = GMSMarker(position: changedPosition)
mainMarker?.title = "Hello World"
mainMarker!.map = mapView
}
这会在没有动画的情况下更改标记的位置。
答案 1 :(得分:1)
另一种肮脏又棘手的解决方法,而无需重新创建标记:
extension GMSMarker
{
func moveWithoutAnimation(_ newPosition: CLLocationCoordinate2D)
{
guard let map = map else {
return
}
let oldPoint = map.projection.point(for: position)
let newPoint = map.projection.point(for: newPosition)
let delta = CGPoint(x: newPoint.x - oldPoint.x, y: newPoint.y - oldPoint.y)
let width = iconView?.width ?? icon?.size.width ?? 26
let height = iconView?.height ?? icon?.size.height ?? 41
let deltaInPercentage = CGPoint(x: 0.5 - delta.x/width, y: 0.5 - delta.y/height)
groundAnchor = deltaInPercentage
}
}
请注意,实际的marker.position
不会改变。
答案 2 :(得分:1)
如在Google地图示例中所实现的,您应为此目的使用CATransaction
。
let changedPosition = CLLocationCoordinate2DMake(22.9734, 78.6569)
CATransaction.begin()
CATransaction.setAnimationDuration(0.0)
marker.position = changedPosition
CATransaction.commit()
Source演示。