在我的应用程序中,我需要显示用户位置周围的商店。每个商店都有名称、标语和徽标,我们希望在我触摸图钉后在地图上出现的标注气泡上显示所有这些信息。考虑到我需要远程加载图像,并且在触摸引脚后等待三秒钟才能看到标注是不可接受的,最好的解决方案是什么?大约 20 家商店的数组的文件就像 10kb,但如果我们立即加载所有这些商店的徽标,也许它会像 110kb(考虑到每张图像估计 5kb),我不确定这是否是一个好主意。
在我的一个项目中,这种情况工作得很好。我正在使用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
当然,您需要稍微调整一下代码。