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

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

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

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

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

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

有人对此有想法吗?

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

【问题讨论】:

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

标签: ios animation mkmapview mkannotationview cabasicanimation


【解决方案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: 委托方法。每当用户滚动/缩放时,都会调用此方法。试一次。它可能会帮助你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多