缩放地图视图时动画AnnotationView消失?

Posted

技术标签:

【中文标题】缩放地图视图时动画AnnotationView消失?【英文标题】:Animated AnnotationView disappears while zooming the mapview? 【发布时间】:2012-07-10 20:45:19 【问题描述】:

我将CABasicAnimation 添加到AnnotationView 图层以模拟汽车在地图视图上移动。

这工作正常,直到我在动画进行时尝试放大或缩小地图视图。

我发现缩放地图视图时动画注释视图消失了!!

我猜这可能是由于缩放地图视图时与动画对象关联的图层已被删除。

我尝试通过在缩放时停止动画来解决这个问题。但结果并不好。汽车似乎跳到了目标点。

有人对此有想法吗?

有谁知道缩放地图视图时如何让动画仍然运行?

【问题讨论】:

你在这个问题上有什么进展吗?我遇到了同样的问题,想解决它。 @Hubert 你能发布你的移动注释代码吗? 【参考方案1】:

我不知道如何以编程方式解决您的问题,但是如果在用户开始缩放时存储汽车位置(点 a),当缩放完成时,计算当前位置和新位置之间的距离(点 b),然后将其从 a 点动画到 b 点。这样,汽车就不会“跳”到第二个目标点。为了让它更漂亮一点,以正常速度的两倍启动汽车速度,然后在接近“B”点时减速至正常速度。我认为这会让它看起来不像是一个错误,而更像是一个效果。

【讨论】:

好主意,但我真的需要一个工作代码的答案。我什至不知道如何检测用户何时放大 MKMapView。【参考方案2】:

我通过终止 regionWillChangeAnimated 上的所有注释动画来解决它:-

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated


  for (int i=0;i< [mapView.annotations count];i++)
  
    id annotation = [mapView.annotations objectAtIndex:i];

    MKAnnotationView* annView =[mapView viewForAnnotation: annotation];
    if (annView != nil)
    

        CALayer* layer = annView.layer;
        [layer removeAllAnimations];
    

  

【讨论】:

【参考方案3】:

我认为,您可以使用mapView:regionDidChangeAnimated: 委托方法。每当用户滚动/缩放时,都会调用此方法。试一次。它可能会帮助你。

【讨论】:

以上是关于缩放地图视图时动画AnnotationView消失?的主要内容,如果未能解决你的问题,请参考以下文章

为移动目标 lat/lng 和缩放级别的动画偏移地图片段的中心

防止覆盖在缩放时消失 - MKMapView & MKOverlay

mkmapview MKUserLocation AnnotationView

ArcGIS api for javascript——地图配置-定制缩放动画,定制缩放框

从另一个活动返回时,MapFragment 的地图加载滞后

ArcGIS api for javascript——地图配置-定制缩放动画