2、

自定义 线的图片,只需要在 rendererForOverlay 方法中,设置:

polylineRenderer.strokeImage = [UIImage imageNamed:@"jiantouD"];  //即可显示

注意图片的格式:用于生成笔触纹理id的图片(image需满足: 长宽相等,且宽度值为2的整数次幂; 如果您需要减轻绘制产生的锯齿,您可以参考AMap.bundle中的traffic_texture_blue.png的方式,在image两边增加部分透明像素.)。(简单说就是正方的图片,又明确方向的图片,默认方向为向下)

1、

demo : https://github.com/xushiyou23/AMapTesting

利用高德绘制线:1、绘制线 坐标数组每0.02s增加一次坐标点--2、移除原来点绘制线--3、添加新的+每绘制3次,让绘制线最后3组坐标在屏幕中 居中----循环1-3;最后让绘制线居中在屏幕中即可

代码:

#import "HomeViewController.h"

///绘制间隔
#define huizhiTimes 0.02

///居中点的个数
#define IntheMiddlePoint 2
///每次画线跳跃几个点
#define jumpPoints 3

@interface HomeViewController ()<MAMapViewDelegate>{

//绘制了多少点  和总个数对比
NSInteger huizhiNum; //绘制线
MAPolyline *commonPolyline;
//结束绘制
BOOL endHuizhi;
} ///需要居中显示的点
@property(nonatomic,strong) NSMutableArray * TenPointArray ;
@property (nonatomic, strong) NSMutableArray * pointArray;
@end @implementation HomeViewController ///触摸移动 开始绘制
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self mapViewHUIZHI];
} - (void)viewDidLoad {
[super viewDidLoad]; // 加载地图
[self setMap]; [self.mapViewhome setMapType:MAMapTypeStandard];
self.pointArray=[NSMutableArray array]; } #pragma mark Map
-(void)setMap{ ///初始化地图
self.mapViewhome = [[MAMapView alloc] initWithFrame:self.view.frame];
self.mapViewhome.showsCompass= NO; // 设置成NO表示关闭指南针;YES表示显示指南针
///如果您需要进入地图就显示定位小蓝点,则需要下面两行代码
self.mapViewhome.showsUserLocation = NO;
[self.mapViewhome setZoomLevel: animated:YES];
self.mapViewhome.userTrackingMode = MAUserTrackingModeFollow;
self.mapViewhome.delegate =self;
///地图需要v4.5.0及以上版本才必须要打开此选项(v4.5.0以下版本,需要手动配置info.plist)
[AMapServices sharedServices].enableHTTPS = YES;
self.mapViewhome.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
///把地图添加至view self.mapViewhome.mapType = MAMapTypeNavi;
[self.view addSubview:self.mapViewhome]; } #pragma mark ---------------------------------绘制轨迹-
//创建数据
-(void)huizhiData{ huizhiNum = ;
_TenPointArray = [NSMutableArray array]; //di 中存放坐标
NSDictionary * di = @{@"latitude":dict[@"latitude"],@"longitude":dict[@"longitude"]}; //坐标数组
[self.pointArray addObject:di]; }
//绘制线
- (void)mapViewHUIZHI{ huizhiNum +=jumpPoints ;
if (huizhiNum>(_pointArray.count-)) {
huizhiNum =_pointArray.count-;
endHuizhi = YES;
} CLLocationCoordinate2D commonPolylineCoords[huizhiNum];
for (int i=; i<huizhiNum; i++) {
NSDictionary * dic = self.pointArray[i]; commonPolylineCoords[i].latitude= [dic[@"latitude"] doubleValue];
commonPolylineCoords[i].longitude=[dic[@"longitude"] doubleValue];
} [self.mapViewhome removeOverlay:commonPolyline];
//构造折线对象
commonPolyline = [MAPolyline polylineWithCoordinates:commonPolylineCoords count:huizhiNum];
//在地图上添加折线对象
[self.mapViewhome addOverlay: commonPolyline]; //设置地图中心位置
NSDictionary * huizhiDic2 = self.pointArray[huizhiNum];
MAPointAnnotation * a1= [[MAPointAnnotation alloc] init];
a1.coordinate = CLLocationCoordinate2DMake([huizhiDic2[@"latitude"] doubleValue], [ huizhiDic2[@"longitude"] doubleValue]); //划线 显示进行中的后10个点
if (_TenPointArray.count<IntheMiddlePoint)
{ [_TenPointArray addObject:a1];
}else{
[_TenPointArray replaceObjectAtIndex: withObject:a1];
} //设置地图中心位置 if(endHuizhi){
[self.mapViewhome showOverlays:@[commonPolyline] edgePadding:UIEdgeInsetsMake(IPHONEHIGHT(), IPHONEWIDTH(), IPHONEHIGHT(), IPHONEWIDTH()) animated:YES];
huizhiNum = ;
}else{ if (huizhiNum%==)
{ //开始居中 后面的点
[self.mapViewhome showAnnotations:_TenPointArray edgePadding:UIEdgeInsetsMake(IPHONEHIGHT(), IPHONEWIDTH(), IPHONEHIGHT(), IPHONEWIDTH()) animated:YES];
} } } #pragma mark - MAMapViewDelegate 样式
-(MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay {
//绘制线
if ([overlay isKindOfClass:[MAPolyline class]]) {
if(huizhiNum<){
[self performSelector:@selector(mapViewHUIZHI) withObject:nil afterDelay:huizhiTimes];
}
MAPolylineRenderer *polylineRenderer = [[MAPolylineRenderer alloc] initWithPolyline:overlay];
polylineRenderer.lineWidth= .f;
polylineRenderer.strokeColor= [UIColor greenColor];
polylineRenderer.lineJoinType = kMALineJoinRound;
polylineRenderer.lineCapType= kMALineCapRound;
return polylineRenderer;
}
return nil;
} @end

iOS 高德自定义坐标轨迹绘制动画 类似与Keep的轨迹绘制的更多相关文章

  1. iOS-自定义Model转场动画-仿酷我音乐播放器效果

    周末,闲来无事,仿写了酷我音乐播放器效果: 效果图如下: 实现思路: 1.实现手势处理视图旋转 2.自定义Model动画: 1.手势是利用了一个UIPanGestureRecognizer手势: 注意 ...

  2. iOS CATransition 自定义转场动画

    https://www.jianshu.com/p/39c051cfe7dd CATransition CATransition 是CAAnimation的子类(如下图所示),用于控制器和控制器之间的 ...

  3. Android -- 自定义ViewGroup+贝塞尔+属性动画实现仿QQ点赞效果

    1,昨天我们写了篇简单的贝塞尔曲线的应用,今天和大家一起写一个QQ名片上常用的给别人点赞的效果,实现效果图如下: 红心的图片比较丑,见谅见谅(哈哈哈哈哈哈).... 2,实现的思路和原理 从上面的效果 ...

  4. iOS CAShapeLayer、CADisplayLink 实现波浪动画效果

    iOS CAShapeLayer.CADisplayLink 实现波浪动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnima ...

  5. 自定义 Layer 属性的动画

    默认情况下,CALayer 及其子类的绝大部分标准属性都可以执行动画,无论是添加一个 CAAnimation 到 Layer(显式动画),亦或是为属性指定一个动作然后修改它(隐式动画).   但有时候 ...

  6. iOS中 自定义cell分割线/分割线偏移 韩俊强的博客

    在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...

  7. 18个超有趣的SVG绘制动画赏析

    SVG作为时下比较新颖的技术标准,已经建立了很多基于SVG的前端项目.由于SVG在绘制路径上非常灵活,我们将很多网页上的元素使用SVG来绘制而成,有各种人物.小图标.小动画等等.今天我们收集了18个非 ...

  8. 程序猿必备的10款超有趣的SVG绘制动画赏析

    SVG作为时下比较新颖的技术标准,已经建立了很多基于SVG的前端项目.由于SVG在绘制路径上非常灵活,我们将很多网页上的元素使用SVG来绘制而成,有各种人物.小图标.小动画等等.今天我们收集了10个非 ...

  9. 『科学计算』科学绘图库matplotlib学习之绘制动画

    基础 1.matplotlib绘图函数接收两个等长list,第一个作为集合x坐标,第二个作为集合y坐标 2.基本函数: animation.FuncAnimation(fig, update_poin ...

随机推荐

  1. CSS常见的中属性级,选择符级的Hack

    注意:尽量找到通用方法而减少对CSS Hack的使用,大规模使用CSS Hack会带来维护成本的提高以及浏览器版本变化而带来类似Hack失效等系列问题. 星号 * 针对IE6,7:下划线 _ 针对ie ...

  2. HTML和CSS前端教程03-CSS文本样式

    目录 1.CSS颜色-建议就用十六进制 2.CSS长度的度量单位-建议就用px 3.CSS文本样式 3.1. 字体属性 3.1. 文本样式 1.CSS颜色-建议就用十六进制 p{ color: #ff ...

  3. Error occurred during initialization of VM Could not reserve enough space for 2097152KB object heap

    ionic build Android后的报错问题 ionic 升级了splashscreen和statusbar的插件后,执行ionic build android会一直报打包错误.原因是过低的An ...

  4. ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门

    一.前言 1.本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NE ...

  5. js 条件判断

    练习 小明身高1.75,体重80.5kg.请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数: 低于18.5:过轻 18.5-25:正常 25-28:过重 28-32:肥 ...

  6. SQLServer之函数简介

    用户定义函数定义 与编程语言中的函数类似,SQL Server 用户定义函数是接受参数.执行操作(例如复杂计算)并将操作结果以值的形式返回的例程. 返回值可以是单个标量值或结果集. 用户定义函数准则 ...

  7. 启动期间的内存管理之初始化过程概述----Linux内存管理(九)

    在内存管理的上下文中, 初始化(initialization)可以有多种含义. 在许多CPU上, 必须显式设置适用于Linux内核的内存模型. 例如在x86_32上需要切换到保护模式, 然后内核才能检 ...

  8. AXI-Lite总线及其自定义IP核使用分析总结

    ZYNQ的优势在于通过高效的接口总线组成了ARM+FPGA的架构.我认为两者是互为底层的,当进行算法验证时,ARM端现有的硬件控制器和库函数可以很方便地连接外设,而不像FPGA设计那样完全写出接口时序 ...

  9. phpstorm ftp主动模式能连接上,但获取不到目录;

    前面一直都在使用ST做开发,但是也想试试传说中的phpstorm神器.一切都弄好了,想使用它的远程开发功能,省去我本地开发然后再ftp上传做法. 但是却遇到了这个问题,困扰了我三四天!!!我各种百度都 ...

  10. LeetCode算法题-Reshape the Matrix(Java实现)

    这是悦乐书的第264次更新,第277篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第131题(顺位题号是566).在MATLAB中,有一个非常有用的函数叫做'reshap ...