最近、私たちのアプリケーションは、クライアントが画像を要求するように画像取り込みロジックを置き換える必要があります(画像はサーバーから動的に構築されます)。iOS画像サイズを指定したURLから画像を読み込みます
画像のURLの形式は次のとおりです。 カスタムビューのほとんどは、以下のパターンで構築されているhttp://image.server.url/path?width={{width}}&height={{height}}
:
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
// do some initializations
}
return self;
}
- (void)setImageURL:(NSURL *)URL {
// do image fetching
}
そして、それは次のようにインスタンス化されています
SomeView *view = [[SomeView alloc] init];
view.imageURL = [NSURL URLWithString:@"..."];
[self addSubview:view];
この(すべての画像のサイズが静的であるため)問題ではありませんでしたが、動的サイズの画像を要求することはできませんでした。なぜなら、画像のフェッチ-layoutSubviews
が呼び出される前に実行され、ターゲットイメージコンテナのサイズは常にゼロです。
結局のところ、レイアウトが完了した時点(画像コンテナのためのオブザーバを使用して)、またはすべての画像コンテナの静的サイズを把握する必要があります。
これには最適な解決策はありますか?
ベスト・ソリューションは、ネットワーク・アセットを非同期的にロードすることです。ダウンロードが完了したら、UIを「本当に本当のもの」で更新します。実際には、これは、ネットワークアセットがロードされている間に、アニメーション進行グラフィック(「ロード待ち!」)またはプレースホルダーアセット(実際のものを取得している間に低解像度のグラフィック) – xaphod