0

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

4

1 に答える 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 に答える