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 ...
随机推荐
- HTML5移动端拖动惯性
下面代码只是实现了上下滑动惯性,没有写水平滑动惯性.(临时代码笔记,可能会在以后的过程中不断更新优化代码) /** * 惯性原理: * 产生的速度 = 移动距离 / 移动时间 * 距离 = 松开的坐标 ...
- LayoutInflater.inflate()方法两个参数和三个参数
转载请标明出处:https://www.cnblogs.com/tangZH/p/7074853.html 很多人都用过LayoutInflater(布局填充器) 对于我来说通常使用下面两种:Lay ...
- Android使用Mob ShareSDK 分享不同平台
Share分享,要注意的是,如果不能调用起微信相关,看看微信开发者平台是否添加正式,微信开发者正式之后,打正式包进行分享调用 /*分享弹框*/ private void showShare2() { ...
- Android开发中如何使用RecyclerView
介绍 在Android应用程序中,只要您想显示数据列表,就可以使用 RecyclerView . 早期的Android提供 ListView 了同样的东西. RecyclerView 可以被认为是一个 ...
- MongoDB分片 在部署和维护管理 中常见事项的总结
分片(sharding)是MongoDB将大型集合分割到不同服务器(或者说集群)上所采用的方法,主要为应对高吞吐量与大数据量的应用场景提供了方法. 和既有的分库分表.分区方案相比,MongoDB的最大 ...
- Redis持久化的方式
Redis小知识: redis是键值对的数据库,有5中主要数据类型: 字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset) Redis持 ...
- python开发规范和(configparser、random模块)
目录结构: bin:存放程序入口,程序启动文件. conf:存放配置文件,配置文件主要是一些全局变量,路径信息等. core:程序核心文件,不涉及到业务逻辑. app:存放和系统业务相关的逻辑. db ...
- c/c++ 多线程 一个线程等待某种事件发生
多线程 一个线程等待某种事件发生 背景:某个线程在能够完成其任务之前可能需要等待另一个线程完成其任务. 例如:坐夜间列车,为了能够不坐过站, 1,整夜保持清醒,但是这样你就会非常累,不能够睡觉. 2, ...
- 同步锁Synchronized与Lock的区别?
synchronized与Lock两者区别: 1:Lock是一个接口,而Synchronized是关键字. 2:Synchronized会自动释放锁,而Lock必须手动释放锁. 3:Lock可以让等待 ...
- AI deeplab
参考链接: https://arxiv.org/pdf/1412.7062v3.pdf