异步获取图像并设置setNeedsDisplay

时间:2013-02-04 02:18:59

标签: objective-c setneedsdisplay dispatch-async

此代码位于单元初始化例程中,用于设置自定义单元格的元素。它以异步方式从Web获取图像。但是我需要它重绘一次。

这是我的代码片段:

dispatch_async(myCustomQueue, ^{

    //Look for the image in a repository, if it's not there
    //load the image from the web (a slow process) and return it
    mCover.image = [helperMethods imageManagerRequest:URL];

    //Set the image to be redrawn in the next draw cycle
    dispatch_async(dispatch_get_main_queue(), ^{
        [mCover setNeedsDisplay];
    });

});

但它没有重绘UIImageView。我试图重新绘制整个单元格,但这也不起作用。非常感谢您的帮助。我一直试图解决这个问题!

1 个答案:

答案 0 :(得分:3)

而不是setNeedsDisplay,您应该像Apple在their documentation中提到的那样在主线程上设置图像。

  

注意:在大多数情况下,UIKit类只能用于   应用程序的主要线程。对于课程尤其如此   源自UIResponder或涉及操纵你的   应用程序的用户界面。

这可以解决您的问题:

dispatch_async(myCustomQueue, ^{

    //Look for the image in a repository, if it's not there
    //load the image from the web (a slow process) and return it
    UIImage *image = [helperMethods imageManagerRequest:URL];

    //Set the image to be redrawn in the next draw cycle
    dispatch_async(dispatch_get_main_queue(), ^{
        mCover.image = image;
    });

});