高德地图轨迹回放没有更多的代理方法支持,看了一下高德地图的官方demo里面只有一个点标注平滑移动,类里面也只有一个方法用于整个动画的实现,但是里面是画了轨迹的,如果是坐标点的话,单靠这个方法很难实现更多的功能,比如说要显示行驶速度,行驶的具体信息,包括他的暂停都是全部动画的暂停,而不是到了某坐标点就暂停,如果在加入进度条更不能满足。
实现的方式就是:通过点与点之间形成一条路线,就类似于demo里的一条一条的轨迹,频繁的调用动画的方法,类似于动画片的一帧一帧的播放一样,并且在回调方法里加入判断。
注意:在一帧之中,一个坐标系数组只能存放一条地理位置信息!!!
提示问题:动画方法的duration参数,越大,动画时间越慢,越小越快,具体多小有多快,不得而知,不知道他是怎么计算时间的。研究了一下,发现实际时间需要通过这个方法获取
for(MAAnnotationMoveAnimation *animation in [self.newannotations allMoveAnimations]) {
factTime = factTime+animation.duration;
}
这个factTime就是实际时间,不过在我这没用到,如果需要用到播放时间可以使用这个参数
关于停止在某个定位点的实现,可以通过一个全局变量计算器,用它来计算当前进行过的动画次数,点击停止的时候,已经获取了当前的动画次数,这样就能知道在哪个点停下了。这里为什么同样是使用的停止方法,而不是从头开始呢,因为我的地理系坐标里面只有一个经纬度,相当于一条路径,所以从头自然就不会从起始点开始了。
至于进度条的实现,可以通过UISlider控制器和定时器实现。
如何将进度条和小车的地图移动联系起来,很简单,只要将进度条的刻度数量和经纬度的个数对应即可。
项目最终已经实现,如果后续有bug,再进行补充。
总的来说,高德地图给的代理方法(监听)太少,他的代理方法是你把经纬度给他,他根据你的经纬度数组,从第一个到最后一个按照动画的方式让其在地图上移动,至于中间过程的监听是没有的,所以做起来就很繁琐,希望高德地图能够改进吧。