在地图标注气泡中加载远程图像时的性能问题

时间:2012-04-20 10:39:01

标签: ios xcode image map callout

在我的应用中,我需要在用户位置周围显示商店。每个商店都有名称,标语和徽标,我们希望在触摸销钉时在地图上显示的标注气泡上显示所有这些信息。考虑到我需要远程加载图像,并且在接触引脚后等待三秒钟才能看到标注是不可接受的,那么最佳解决方案是什么? 大约20个商店的数组文件就像10kb,但是如果我们马上为它们加载徽标,也许它就像110kb(考虑估计每张图像5kb),我不确定它是不是是一个好主意。

1 个答案:

答案 0 :(得分:1)

在我的一个项目中,该案例运作得很好。 我正在使用SDWebImage进行图像的远程异步加载。

我做了:

继承MKPinAnnotationView:

.h

@interface TLStoreResultMapAnnotationView : MKPinAnnotationView

@property (assign)BOOL imageSet;

@end

的.m

#import "TLStoreResultMapAnnotationView.h"
#import "TLStoreResultMapAnnotation.h"
#import "UIImageView+WebCache.h"

@implementation TLStoreResultMapAnnotationView
@synthesize imageSet=_imageSet;

- (void)layoutSubviews {

    if(self.selected && (!self.imageSet)) {
        TLStoreResultMapAnnotation *annotation = (TLStoreResultMapAnnotation *)self.annotation;

        NSURL *url = [NSURL URLWithString:[annotation.store.imageURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

        UIImageView *storeImageView = (UIImageView *)self.leftCalloutAccessoryView;
        storeImageView.frame = CGRectMake(storeImageView.frame.origin.x,storeImageView.frame.origin.y,30.0,30.0);
        storeImageView.contentMode = UIViewContentModeScaleAspectFill;
        storeImageView.clipsToBounds = YES;
        [storeImageView setImageWithURL:url
                  placeholderImage:[UIImage imageNamed:@"webloading.png"] options:SDWebImageCacheMemoryOnly];


        self.imageSet = YES;
    }

    [super layoutSubviews];
    UIImageView *storeImageView = (UIImageView *)self.leftCalloutAccessoryView;
    storeImageView.frame = CGRectMake(storeImageView.frame.origin.x,storeImageView.frame.origin.y,30.0,30.0);
}

@end

当然你需要调整一下代码。