缩放地图视图时动画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