0

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

4

1 回答 1

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

当然,您需要稍微调整代码。

于 2012-04-20T10:45:16.267 回答