0

を に実装しCATiledLayerていUIScrollViewます。にはCATiledLayer、次のようにレイヤーを描画する関数があります。

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    CGContextTranslateCTM(ctx, 0.0f, 0.0f);
    CGContextScaleCTM(ctx, 1.0f, -1.0f);

    CGRect box = CGContextGetClipBoundingBox(ctx);

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"urlhere"]];
    UIImage *image = [[UIImage alloc] initWithData:data];

    CGContextDrawImage(ctx, box, [image CGImage]);
    [image release];
    [data release];
}

問題は、各タイルがダウンロードされているときに、他のタイルのダウンロードがブロックされることです。これらのタイルが並行してダウンロードされることを強く望みます。特に、私が制御できない別の UI 要素のダウンロードをブロックします。

CATiledLayer基本的に、描画メッセージでデータを非同期にダウンロードする方法を知る必要があるだけです。

4

1 に答える 1

0

NSURLConnection などを使用して、他の状況と同じようにデータを非同期でダウンロードします。ダウンロードが完了したら、レイヤーに再描画を指示し、-drawLayer:inContext: を呼び出します。その時点で、ダウンロードした画像を取得します。つまり、-drawLayer でデータをダウンロードしたり、デフォルトで同期してブロックする -dataWithContentsOfURL を使用したりしないでください。

于 2010-06-04T05:48:56.697 に答える