2011-12-20 11 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); 
で作成されました
関連する問題