UIImage initWithData如何等到完成

时间:2012-07-09 16:30:43

标签: iphone ios uikit core-graphics quartz-2d

当我以这种方式加载BMP图像时:

NSData * pImageData = [[NSData alloc] initWithBytesNoCopy:pBuffer length:dwSize freeWhenDone:NO];
UIImage * pLoaded = [[UIImage alloc] initWithData:pImageData];
[pImageData release];

并尝试使用Quartz2D显示该图像:

CGImageRef cgImage = [pLoaded CGImage];
CGContextSaveGState(context);
CGContextTranslateCTM(context, x, y*2 + h);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(x, y, w, h), cgImage);
CGContextRestoreGState(context);

图像显示为黑色矩形或有时显示但不完整。当我在initWithData之后暂停1秒钟时,图像显示正确。

是否有UIKit / Quartz2D API方法等待图像初始化完成?

2 个答案:

答案 0 :(得分:0)

您可以使用@synchronizationdispatch队列等待图片下载完成。

答案 1 :(得分:0)

使用时一切正常:

NSData * pImageData = [[NSData alloc] initWithBytes:pBuffer length:dwSize];

而不是:

NSData * pImageData = [[NSData alloc] initWithBytesNoCopy:pBuffer length:dwSize freeWhenDone:NO];

感谢phix23。