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 ...
随机推荐
- 原生js实现数据单向绑定
Object.defineProperty()方法直接在对象上定义一个新属性,或修改对象上的现有属性,并返回该对象. Object.defineProperty(obj, prop, descript ...
- git 常用命令,上传,下载,更新线上代码
git 常用命令以及推荐git新建上传个人博客 $ git clone //本地如果无远程代码,先做这步,不然就忽略 $ git status //查看本地自己修改了多少文件 $ git add . ...
- CSS3 font-face使用
在 CSS3 之前,web 设计师必须使用已在用户计算机上安装好的字体. 通过 CSS3,web 设计师可以使用他们喜欢的任意字体. 当您找到或购买到希望使用的字体时,可将该字体文件存放到 web 服 ...
- android中的相对路径
转载请标明出处:https://www.cnblogs.com/tangZH/p/9939655.html 1.同个文件夹访问 D:\Java\main\A.java D:\Java\main\B. ...
- ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...
- linux(centos7) 常用命令和快捷键 持续验证更新中...
1.文件和目录cd 进入目录示例:cd /home 进入home目录 cd.. 返回上一级目录cd../.. 返回上两级目录cd - 返回上次所在目录cd ~ 返回根目录 ...
- Windows Java包环境变量的设置
复制Bin文件所在路径 验证
- httpservlet里单纯分页
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletExcep ...
- 从0开始的Python学习008变量
局部变量 在我们定义函数的过程中,函数内外具有相同名称的变量是没有任何关系的.变量的名称对于函数来说是局部的,而它所在的代码块就是它的作用域. 使用局部变量 #局部变量 def func(x): pr ...
- Spring MVC 表单校验 (七)
完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)和hibernate-validato ...