【问题标题】:How to disable animation for changing GMSMarker position in iOS?如何禁用在 iOS 中更改 GMSMarker 位置的动画?
【发布时间】:2016-10-25 14:54:20
【问题描述】:

根据documentation你可以用动画改变标记位置:

标记位置。 动画。

你知道如何禁用这个动画吗?

【问题讨论】:

  • 有点骇人听闻。检查我的答案

标签: ios swift google-maps google-maps-sdk-ios


【解决方案1】:

假设您对标记的引用是 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
}

这将在没有动画的情况下更改标记的位置。

【讨论】:

  • @RajanMaheshwari.. 我想用我更新的坐标移动我的标记。我怎样才能做到这一点。
  • @UmaMadhavi 这只是创建一个没有动画的更新坐标的新标记。你可以简单地使用CoreAnimation 来实现这一点,而不是让你的标记为零。检查这个stackoverflow.com/a/19128891/2545465 即使是谷歌地图也为此目的提供了一个方法markerWithPosition:
  • @RajanMaheshwari.. 是的,但我不明白那个。
  • @UmaMadhavi 它很简单,首先你得到你的坐标,可能在didUpdateLocation。无论您走到哪里,都可以将标记动画到您的新坐标。只需提供标记新坐标,我猜默认情况下它会在谷歌地图中动画到该位置
  • @RajanMaheshwari.yes 我想添加自定义图像,例如汽车,我想旋转汽车图标而不是默认图标。
【解决方案2】:

正如在谷歌地图示例中实现的那样,您应该为此使用CATransaction

let changedPosition = CLLocationCoordinate2DMake(22.9734, 78.6569)
CATransaction.begin()
CATransaction.setAnimationDuration(0.0)
marker.position = changedPosition
CATransaction.commit()

Source 演示。

【讨论】:

    【解决方案3】:

    另一个不重新创建标记的肮脏和hacky解决方法:

    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 不会改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      相关资源
      最近更新 更多