导图
我是一个文艺iOS开发人员点平滑移动.gif功能说明:根据输入的关键点和时间参数,实现点的平滑移动效果。
使用场景:可应用到展示车辆行驶轨迹、用户移动轨迹等场景。
点平滑移动实现步骤
1.首先要创建一个MAAnimatedAnnotation
对象,并且调用他的一个添加动画的方法
注意:这个方法可以调用多次,即动画可以添加多个
/**
@brief 添加移动动画, 第一个添加的动画以当前coordinate为起始点,沿传入的coordinates点移动,否则以上一个动画终点为起始点. since 4.5.0
@param coordinates c数组,由调用者负责coordinates指向内存的管理
@param count coordinates数组大小
@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
强烈建议:
duration
最好根据距离(经纬度差)来设置,也就是距离长点duration
设置大点,这样显得动画自然,
另外模拟器
会造成实际动画时间跟你设置的动画时间不符合,很明显感觉动画执行完时间要多于你设置的时间
2.并且给MAAnimatedAnnotation
对象设置coordinate
属性
MAAnimatedAnnotation *anno = [[MAAnimatedAnnotation alloc] init];
anno.coordinate = coords1[0];
3.再将anno添加到mapView上就行了
[self.mapView addAnnotation:self.annotation];
注意:本例中所有的经纬度位置信息都是写死的,这只是为了更好的显示展示效果,实际开发中应该是根据起始点的建议位置信息和实时经纬度位置信息进行绘制,本文不做过多讲解,另外,笔者水平有限,要是给各位大虾们造成什么疑惑而引起心理乃至身体的事故,医药费恕不报销,谢谢~~~~
Demo 地址:
https://github.com/ZNBmm/AmapAnimatedAnnotation
网友评论
for(MAAnnotationMoveAnimation *animation in [self.annotation allMoveAnimations]) {
[animation cancel]; // 取消动画
//.......根据当前的滑块进度 添加移动动画 - (void)addMoveAnimationWithKeyCoordinates:(CLLocationCoordinate2D *)coordinates
count:(NSUInteger)count
withDuration:(CGFloat)duration
withName:(NSString *)name
completeCallback:(void(^)(BOOL isFinished))completeCallback;
}
我就是这么做的,新手 实在想不出别的方法了,我试过利用角度.象限来判断角度,可惜没整明白...
count:(NSUInteger)count
withDuration:(CGFloat)duration
withName:(NSString *)name
completeCallback:(void(^)(BOOL isFinished))completeCallback;这个动画结束的时候更改他的title
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode;
计算,保存,祝你好运😁