如何让CATiledLayer不阻塞主线程

时间:2010-06-03 14:31:58

标签: iphone objective-c uikit ipad catiledlayer

我正在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绘图消息中异步下载数据。

1 个答案:

答案 0 :(得分:0)

您可以像使用NSURLConnection之类的任何其他情况一样异步下载数据。下载完成后,告诉图层重新绘制,然后调用-drawLayer:inContext:此时您只需抓取下载的图像。换句话说,不要在-drawLayer中下载数据,也不要使用-dataWithContentsOfURL,它是默认的同步和块。