私のアプリでは、ユーザーの場所の周りに店舗を表示する必要があります。各店舗には名前、タグライン、ロゴがあり、ピンをタッチするとマップに表示されるコールアウトバブルにこれらすべての情報を表示したいと思います。画像をリモートでロードする必要があり、ピンに触れた後、コールアウトが表示されるまで3秒間待つことは受け入れられないことを考えると、最善の解決策は何でしょうか。約20店舗の配列のファイルは10kbのようなものですが、それらすべてのロゴをすぐにロードすると、110kb(画像あたり5kbの見積もりを考慮)のようになる可能性があります。良い考えです。
質問する
684 次
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 に答える