美文网首页
iOS 百度地图AnnotationView优化

iOS 百度地图AnnotationView优化

作者: 赵哥窟 | 来源:发表于2018-12-14 10:03 被阅读35次
WechatIMG31.jpeg

如图产品需求:在百度地图上展示标注和轨迹。
优化之前只能在百度地图上展示200个AnnotationView和500多个轨迹。超过200个拖动就会有卡顿。

但是产品希望把200个AnnotationView提高到1000个左右,轨迹不限制。。
吐槽就不吐槽了。接下来说说优化思路。

思路一:从接口开始
目前轨迹接口返回2000多个位置信息,如果这2000多个数据一起返回。解析jason就有点耗时。所有想到的是2000多个信息分多个数组返回。但还是一个接口返回,比如2000个数据分别放到20个数组,一个数组100个位置信息, 这样就解析就可以用异步多线程解析,提高了解析速度。降低了瞬间内存提升。
标注点接口一样的思路。

思路二:看卡顿是那个部分造成的。
实验1:只绘制2000多个轨迹线很快,拖动也没有卡顿的情况很流畅。
实验2:只绘制800多个标注点,绘制就卡。比如iPhone5s直接就崩溃了。

问题出在绘制AnnotationView。知道问题了哪怎么解决?
首先看一下AnnotationView是一个自定义的,继承BMKPinAnnotationView
图片是用的切图,文本是UILabel。试想一下瞬间读取加载800张图片能不卡吗。
所以解决办法是 图片和文本都采用绘制。

主要代码

-(void)drawRect:(CGRect)rect fillColor:(UIColor *)fillColor fontSize:(CGFloat)fontSize lineWidth:(CGFloat)lineWidth{
    _solidLine =  [CAShapeLayer layer];
    CGMutablePathRef solidPath =  CGPathCreateMutable();
    _solidLine.lineWidth = lineWidth ;
    _solidLine.strokeColor = [UIColor whiteColor].CGColor;
    _solidLine.fillColor = fillColor.CGColor;
    CGPathAddEllipseInRect(solidPath, nil, rect);
    _solidLine.path = solidPath;
    CGPathRelease(solidPath);
    [self.layer addSublayer:_solidLine];
    
    // 绘制文本的图层
    _layerText = [[CATextLayer alloc] init];
    // 背景颜色
    _layerText.backgroundColor = [UIColor clearColor].CGColor;
    // 渲染分辨率-重要,否则显示模糊
    _layerText.contentsScale = [UIScreen mainScreen].scale;
    // 显示位置
    _layerText.bounds = CGRectMake(0.0,0, rect.size.width, rect.size.width/2.0);
    _layerText.position = CGPointMake(rect.size.width/2, rect.size.height/2.0);
    _layerText.alignmentMode = kCAAlignmentCenter;
    _layerText.string = [NSString get6parameters:_monitorModel.val];
    if ([self.monitorModel.val floatValue] <= 0) {
        _layerText.foregroundColor = [UIColor getColorWithHexString:@"808080"].CGColor;
    }
    else{
        _layerText.foregroundColor = [UIColor whiteColor].CGColor;
    }
    _layerText.fontSize = fontSize;
    // 添加到父图书
    [self.layer addSublayer:_layerText];
}

在运行一下 iPhone5s 也不崩溃了。但是拖动也卡顿。包括iPhonex上拖动也有明显卡顿,怎么回事。具体不知百度地图内部怎么实现的。猜想应该是拖动的时候又重新绘制了一次地图和标注点吧。
所以在拖动的时候Remove一次AnnotationView

[self.mapView removeAnnotations:self.mapView.annotations];

验证了一下。OK了。在iPhone5s 拖动也不卡了。目前能绘制800多个AnnotationView和2000多个轨迹线。在iPhone5s上运行也不崩溃了。

相关文章

  • iOS 百度地图AnnotationView优化

    如图产品需求:在百度地图上展示标注和轨迹。优化之前只能在百度地图上展示200个AnnotationView和500...

  • 如何做百度地图推广

    2016年新启程,继续开启全新百度地图优化精准推广。什么是百度地图推广?百度地图优化是指将地图信息提升到百度地图的...

  • RN-地图导航

    调起百度网页地图路径导航 调起高德网页地图路径导航 iOS调起百度APP地图路径导航 iOS调起高德app地图路径...

  • 百度地图自定义AnnotationView

    先说问题:当AnnotationView使用自定义的view(类似如下代码),在放大缩小地图的过程中会偏移比较大的...

  • 地图集成调研

    地图集成调研 主要地图API有百度地图、高德地图、腾讯地图、搜狗地图(android、IOS暂不开放)。 百度地图...

  • 百度地图

    IOS第三方地图 百度地图高德地图腾讯地图苹果自带地图谷歌地图(中国屏蔽了) 接下来我们说一下百度地图百度地图SD...

  • 022-地图系列02-iOS百度地图版本及分类

    上一篇:021-地图系列01-iOS百度地图集成 一、iOS百度地图分类 按照大模块可以分为五大块 地图 定位 鹰...

  • 百度地图之官方demo的坑

    参考 iOS百度地图 Demo IOS SDK百度地图不能正常显示,只显示网格 刚下下来的是报错的,要执行以下几步...

  • 常用网址

    环信:http://www.easemob.com/customer/im IOS百度地图开发系列-百度地图不能正...

  • iOS百度地图使用时的注意问题

    iOS使用百度地图时会发现,API本身不带定位功能的,定位是通过iOS系统自身的定位实现的,百度地图API只是封装...

网友评论

      本文标题:iOS 百度地图AnnotationView优化

      本文链接:https://www.haomeiwen.com/subject/qejwhqtx.html