高德地图开发iOS 地图SDK在地图上绘制—点平滑移动

高德地图开发iOS 地图SDK在地图上绘制—点平滑移动

点平滑移动 最后更新时间: 2021年01月22日

简介

功能说明:根据输入的关键点和时间参数,实现点的平滑移动效果。(如下方视频所示)

使用场景:可应用到展示车辆行驶轨迹、用户移动轨迹等场景。

版本要求:3D地图V4.5.0及以上。

效果示例:

如何实现点平滑移动

相关头文件

MAAnimatedAnnotation.h

MAAnnotationMoveAnimation.h

相关接口

MAAnimatedAnnotation.h:(以下内容仅提供OC形式的代码片段)

Objective-C

@interface MAAnimatedAnnotation : MAPointAnnotation<MAAnimatableAnnotation>

/**
 @brief 添加移动动画, 第一个添加的动画以当前coordinate为起始点,沿传入的coordinates点移动,否则以上一个动画终点为起始点. since 4.5.0
 @param coordinates 数组
 @param count 要传入的个数
 @param duration 动画时长,0或<0为无动画
 @param name 名字,如不指定可传nil
 @param completeCallback 动画完成回调,isFinished: 动画是否执行完成
 */
- (void)addMoveAnimationWithKeyCoordinates:(CLLocationCoordinate2D *)coordinates
                                     count:(NSUInteger)count
                              withDuration:(CGFloat)duration
                                  withName:(NSString *)name
                          completeCallback:(void(^)(BOOL isFinished))completeCallback;

/**
 获取所有未完成的移动动画, 返回数组内为MAAnnotationMoveAnimation对象. since 4.5.0
 */
- (NSArray<MAAnnotationMoveAnimation*> *)allMoveAnimations;

/**
 * 移动方向. since 4.5.0
 */
@property (nonatomic, assign) CLLocationDirection movingDirection;

@end

如何实现

1.向地图中添加annotation, annotation必须继承自MAAnimatedAnnotation,或自己实现MAAnimatableAnnotation协议,并实现自己的动画。

2.添加动画

调用annotation 的addMoveAnimationWithKeyCoordinates接口添加动画

Objective-C
Swift

[self.annotation addMoveAnimationWithKeyCoordinates:coords1 count:sizeof(coords1) / sizeof(coords1[0]) withDuration:5 withName:nil completeCallback:^(BOOL isFinished) {
    }];
self.movingAnnotation.addMoveAnimation(withKeyCoordinates:&(self.coords1), count: UInt(self.coords1.count), withDuration: 5, withName: nil, completeCallback:nil);

3.结束未完成动画

Objective-C
Swift

for (MAAnnotationMoveAnimation *animation in [self.annotation allMoveAnimations]) {
    [animation cancel];
}
for item in self.movingAnnotation.allMoveAnimations() {
            let animation = item 
            animation.cancel()
        }