iOS开发:MKMapView性能优化

本文详细介绍了在iOS开发中遇到的LBS应用地图性能问题,特别是当大量成员定位标注导致地图滑动卡顿时,如何进行性能优化。通过分析发现,使用layer.mask进行遮罩和图片大小不一致是性能瓶颈。解决方案包括弃用mask,预处理图片到实际大小,以及提前合成最终显示的图片。经过优化,地图滑动帧数达到60帧,性能显著提升,适用于处理类似UITableView的场景。
摘要由CSDN通过智能技术生成

最近做的项目主要是LBS这块 主打成员定位功能 我们的UI设计是这样的

乍一看上去是挺好挺美观的 不同的人会显示不同的头像 可是当人扎堆的时候 问题就来了

当人多的时候(例如上图所示) 地图滑动起来就能感觉到明显顿卡 那种不流畅感能折磨死人 所以 自然我们要解决这个问题(等等 先不要吐槽为什么不用地图聚合 因为这已经是地图放到最大了 聚合不适合这次的问题讨论)

分析

首先看下我是怎么实现这个annotationView的 由于这个annotationsView是异形的(也就是无法通过设置圆角直接得到) 而且里面的图片还因用户而异 所以解决方案就是使用layer.mask来进行遮罩 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
@implementation MMAnnotationView
 
- (instancetype)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier
{
     self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
     if  ( self )
     {
         self.frame = CGRectMake(0, 0, TRACK_ANNOTATION_SIZE.width, TRACK_ANNOTATION_SIZE.height);
         self.centerOffset = CGPointMake(0, -(TRACK_ANNOTATION_SIZE.height-3)/2);
         self.canShowCallout = NO;
 
         self.avatarView = [[UIImageView alloc] initWithFrame:self.bounds];
         [self addSubview:self.avatarView];
         self.avatarView.contentMode = UIViewContentModeScaleAspectFill;
 
         CAShapeLayer *shapelayer = [CAShapeLayer layer];
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值