// 开始,公司要求制作一段跑步轨迹 在地图上的 动画回放, 传入一段经纬度,

开始一想,这不是很简单吗, 高德地图有可以把经纬度转换成坐标点的方法

/**

* @brief 将经纬度转换为指定view坐标系的坐标

* @param coordinate 经纬度

* @param view 指定的view

* @return 基于指定view坐标系的坐标

*/

- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view;

// 我把经纬度转换成坐标点, 然后构建 path

/* 构建path, 调用着负责释放内存. */

- (CGMutablePathRef)pathForPoints:(CGPoint *)points count:(NSUInteger)count

{

if (points == NULL || count <= 1)

{

return NULL;

}

CGMutablePathRef path = CGPathCreateMutable();

CGPathAddLines(path, NULL, points, count);

return path;

}

//  在然后直接用 path ,初始化一个 CAShapeLayer ,做成动画不就成了 吗, 在它跑完之后直接删除, 再用 高德地图的折线替换,

// 这种方法也可以, 但是后来需求改了, 要求地图旋转,并且地图中心点一直在跑动的点上,

这样,我以屏幕坐标构建的 path 一旦地图旋转, 就全乱了,

// 后来我又想到一个办法, 我从地图手机上定位画线得到的灵感, 我把经纬度点两个两个连成一个个短的折线,放到一个数组里面 ,然后定义了一个 index 属性,  再用一个定时器不停的循环, 在定时器的方法中,用

[self.mapView addOverlay:self.mapOverlayArr[self.index] level:MAOverlayLevelAboveRoads];

不停加载线路在地图上, 同时把地图的中心点, 定位在 经纬度数组取到的最新的经纬度上

CLLocation * location = self.locationArray[self.index];

[self.mapView setCenterCoordinate:location.coordinate animated:NO];

,这样就能保证地图中心一直在跑动的点上, 而且定时器  方法  加载线路够快的话, 就能产生动画效果,

然而, 又出现了问题, 定时器不停的运行

mapView 不停的加载 addOverlay ,使得屏幕非常卡, 经纬度少的话还看不出来, 一旦经纬度多了, 卡的不要不要的, 完全受不了, 而且手机非常烫, 电池都快烧坏了,, 所以这种方法不可行, 至少不完善

// 后来我研究高德地图的画线方法, 发现一个 方法

/**

* @brief 重新设置折线坐标点. since 5.0.0

* @param coords 指定的经纬度坐标点数组, C数组,内部会做copy,调用者负责内存管理

* @param count 坐标点的个数

* @return 是否设置成功

*/

- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger)count;

// 这个方法只用一条折线, 但是可以不停的改变这条折线的位置,

终于利用这个方法 不卡了, 画线的过程中 FPS 60 左右, 完美

// 因为文件太大就 不上传了

最新文章

  1. Java Mybatis 框架入门教程
  2. 抽象工厂模式(Abstract Factory Pattern)
  3. Jquery Table 操作
  4. OpenSesame:一个能够攻击fixed-pin设备的工具
  5. windows日常软件推荐
  6. 使用curl获取网站的http的状态码
  7. Linux内核与根文件系统的关系
  8. apache 反向代理配置(ubuntu)
  9. vmware虚拟机上linux操作系统进行tty1~tty6切换方法和具体步骤
  10. Swift - 控制流/控制结构说明(if,switch,for,while)
  11. 开源一个简单的c++软光栅渲染器
  12. Smarty注释代码
  13. Go学习笔记 - 使用jsonrpc进行远程访问
  14. 阿里Dubbo疯狂更新,关Spring Cloud什么事?
  15. 自己动手修改Robotium代码(下)
  16. Swift2
  17. 微信小程序开发03-这是一个组件
  18. Requset模块
  19. 安全测试学习之bWAPP环境搭建
  20. 电力电子MATLAB

热门文章

  1. 使用WebSocket帮助应用程序群集节点间通信
  2. tensorflow---文字识别
  3. C# EF框架调用数据库的函数
  4. 父div的透明度不影响子div透明度
  5. 获取对象的key值,并保存在数组中
  6. C# 事务 四种事务隔离级别
  7. Springboot 配置 ssl 实现HTTPS 请求 &amp; Tomcat配置SSL支持https请求
  8. Workbook导出excel封装的工具类
  9. 鉴权完成后如何拿到SpringSocial的用户信息
  10. MySQL用户授权【转】