iOS 高德自定义坐标轨迹绘制动画 类似与Keep的轨迹绘制
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的轨迹绘制的更多相关文章
- iOS-自定义Model转场动画-仿酷我音乐播放器效果
周末,闲来无事,仿写了酷我音乐播放器效果: 效果图如下: 实现思路: 1.实现手势处理视图旋转 2.自定义Model动画: 1.手势是利用了一个UIPanGestureRecognizer手势: 注意 ...
- iOS CATransition 自定义转场动画
https://www.jianshu.com/p/39c051cfe7dd CATransition CATransition 是CAAnimation的子类(如下图所示),用于控制器和控制器之间的 ...
- Android -- 自定义ViewGroup+贝塞尔+属性动画实现仿QQ点赞效果
1,昨天我们写了篇简单的贝塞尔曲线的应用,今天和大家一起写一个QQ名片上常用的给别人点赞的效果,实现效果图如下: 红心的图片比较丑,见谅见谅(哈哈哈哈哈哈).... 2,实现的思路和原理 从上面的效果 ...
- iOS CAShapeLayer、CADisplayLink 实现波浪动画效果
iOS CAShapeLayer.CADisplayLink 实现波浪动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnima ...
- 自定义 Layer 属性的动画
默认情况下,CALayer 及其子类的绝大部分标准属性都可以执行动画,无论是添加一个 CAAnimation 到 Layer(显式动画),亦或是为属性指定一个动作然后修改它(隐式动画). 但有时候 ...
- iOS中 自定义cell分割线/分割线偏移 韩俊强的博客
在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...
- 18个超有趣的SVG绘制动画赏析
SVG作为时下比较新颖的技术标准,已经建立了很多基于SVG的前端项目.由于SVG在绘制路径上非常灵活,我们将很多网页上的元素使用SVG来绘制而成,有各种人物.小图标.小动画等等.今天我们收集了18个非 ...
- 程序猿必备的10款超有趣的SVG绘制动画赏析
SVG作为时下比较新颖的技术标准,已经建立了很多基于SVG的前端项目.由于SVG在绘制路径上非常灵活,我们将很多网页上的元素使用SVG来绘制而成,有各种人物.小图标.小动画等等.今天我们收集了10个非 ...
- 『科学计算』科学绘图库matplotlib学习之绘制动画
基础 1.matplotlib绘图函数接收两个等长list,第一个作为集合x坐标,第二个作为集合y坐标 2.基本函数: animation.FuncAnimation(fig, update_poin ...
随机推荐
- 常见六大Web安全攻防解析
前言 在互联网时代,数据安全与个人隐私受到了前所未有的挑战,各种新奇的攻击技术层出不穷.如何才能更好地保护我们的数据?本文主要侧重于分析几种常见的攻击的类型以及防御的方法. 想阅读更多优质原创文章请猛 ...
- jq筛选方法
jq筛选方法(参照手册) 过滤: 1) eq(index|-index):获取第N个元素 负值表示从末尾开始匹配 <!-- 获取匹配的第二个元素 --> <p> This is ...
- 《React设计模式与最佳实践》笔记
书里的demo都是15.3.2以下版本的,有些demo用最新的react 16.x版本会报错,安装包的时候记得改一下版本 第一章 React 基础 命令式编程描述代码如何工作,而声明式编程则表明想 ...
- Android 应用的逆向和审计
Android 应用程序拆解 Android 应用程序是在开发应用程序时创建的数据和资源文件的归档文件. Android 应用程序的扩展名是.apk,意思是应用程序包,在大多数情况下包括以下文件和文件 ...
- Redis环境搭建和代码测试及与GIS结合的GEO数据类型预研
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 1.1传统MySQL+ Memcached架构遇到的问题 My ...
- Easyui datagrid 修改分页组件的分页提示信息为中文
datagrid 修改分页组件的分页提示信息为中文 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 问题描述 默认分页组件为英文展示,如下,希望改成中文展示 ...
- MongoDB:配置与安装
一.配置环境 1.1进行安装下载msi文件 需要注意的一点是,在安装过程中的图示界面不要勾选左下角“安装MongoDB可视化工具”.这是一个客户端管理工具,在后面会具体描述其功能.由于安装时间非常长, ...
- 18-10-31 Scrum Meeting 3
1.会议照片 2.每人的工作 昨天完成的工作 1 制定配置 修改配置 查询配置这三个接口 2 3 获取单词对应的中文释义 4 完成测验的部分接口 5 后端对接计划的接口 6 剩余的 ...
- Spark资源调度和任务调度
一.资源调度&任务调度 1.启动集群后,Worker节点会周期性的[心跳]向Master节点汇报资源情况,Master掌握集群资源情况. 2.当Spark提交一个Application后,根据 ...
- linux $参数
$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...