2011-12-20 55 views
0

我正在嘗試創建繪製從Url下載的圖像的自定義視圖。 代碼是:drawRect和分派上下文錯誤0x0

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    dispatch_queue_t downloadImgQueue = dispatch_queue_create("imgDownload", NULL); 
    dispatch_async(downloadImgQueue, ^{ 



     CGRect myViewSize = CGRectMake(0, 0, 100, 100); 


     NSURL *url = [NSURL URLWithString:@"http://www.mytripolog.com/wp-content/uploads/2011/05/large-big-size-world-political-map.jpg"]; 

     UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 

     dispatch_async(dispatch_get_main_queue(),^{ 

      [image drawInRect:myViewSize]; 

     }); 

    });  
    dispatch_release(downloadImgQueue); 

} 

但是這不起作用。我得到的錯誤:

Dec 20 14:31:31 Mac.local AdSdk[1736] <Error>: CGContextSaveGState: invalid context 0x0 
Dec 20 14:31:31 Mac.local AdSdk[1736] <Error>: CGContextSetBlendMode: invalid context 0x0 
Dec 20 14:31:31 Mac.local AdSdk[1736] <Error>: CGContextSetAlpha: invalid context 0x0 
Dec 20 14:31:31 Mac.local AdSdk[1736] <Error>: CGContextTranslateCTM: invalid context 0x0 
Dec 20 14:31:31 Mac.local AdSdk[1736] <Error>: CGContextScaleCTM: invalid context 0x0 
Dec 20 14:31:31 Mac.local AdSdk[1736] <Error>: CGContextDrawImage: invalid context 0x0 
Dec 20 14:31:31 Mac.local AdSdk[1736] <Error>: CGContextRestoreGState: invalid context 0x0 

我應該改變什麼使這項工作?

回答

1

drawRect:應該只包含繪圖代碼。您應該將圖像下載到其他位置並將其存儲爲視圖的屬性,然後在此方法中繪製它。或者,通過它的外觀,只需使用UIImageView並設置圖像?

drawRect:在視圖的任何部分需要繪製時被調用。這可以在動畫過程中,其他元素出現或消失時或其他任何情況下進行。顯然你不想每次發生這種情況都要進行下載。

0

我有類似的問題,並在圖紙代碼周圍用UIGraphicsPushContext(context)/UIGraphicsPopContext(context)解決。上下文創建與

CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); 
CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, space, kCGImageAlphaPremultipliedLast); 
相關問題