2011-10-20 9 views
0

UIViewの描画機能では、CGContextを使用していくつかの図形を描画します。これはうまく動作し、私の形を見ることができます。 今私はディスク上のpngとしてビューに描画されたものを保存しようとしています。私は様々なドキュメントや記事を読んだことがありますが、何も保存されません。 ios 4.3のシミュレータでのImテスト。CGPathsをUIViewに描画し、PNG形式でビューを保存します。

編集1

私は私のコードを変更して、コンテキスト部分をコメント解除。私はpngを保存することができますが、それは空白です。

- (void)drawRect:(CGRect)rect 
{ 

    CGContextRef ctx= UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(ctx, 0, 0, 0, .5); 
    CGContextBeginPath(ctx); 
    CGContextAddPath(ctx, mutatablepath); 
    //CGContextStrokePath(ctx); 
    CGContextFillPath(ctx); 
    CFRelease(mutatablepath); 




    NSString *path0; 
    NSArray *paths0=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    path0=[[paths0 objectAtIndex:0]stringByAppendingPathComponent:@"images"]; 
    NSError *error; 

    if (![[NSFileManager defaultManager]fileExistsAtPath:path0]) { 

     if(![[NSFileManager defaultManager]createDirectoryAtPath:path0 withIntermediateDirectories:NO attributes:nil error:&error]) 

     { 
      NSLog(@"Create directory error %@",error); 

     } 
    } 




    UIGraphicsBeginImageContext(self.bounds.size); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *image=UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    NSData *imagedata=UIImagePNGRepresentation(image); 

    NSString *namepath=[NSString stringWithFormat:@"%@.png",@"test"]; 
    NSString *path; 
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    path=[[paths objectAtIndex:0]stringByAppendingPathComponent:@"images"]; 
    NSString *savepath=[NSString stringWithFormat:@"%@/%@",path,namepath ]; 


    // NSError 

    NSLog(@"%@",savepath); 

    [imagedata writeToFile:savepath atomically:YES]; 


} 
+0

UIGraphicsGetImageFromCurrentImageContext: この関数は、ビットマップベースのグラフィックスコンテキストが現在のグラフィックスコンテキスト。現在のコンテキストがnilであるか、またはUIGraphicsBeginImageContextの呼び出しによって作成されなかった場合、この関数はnilを返します。 – Benjie

答えて

0

renderInContext方法が暗黙のうちに、必要に応じてdrawRectを呼び出すので、あなたは、あなたのdrawRect方法のうちのコードを保存した画像を取ることによってそれを行うことができます。

UIView *myView = [[MyViewClass alloc] initWithFrame:CGRectMake(/*...*/)]; 
UIGraphicsBeginImageContext(myView.bounds.size); 
[myView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

出典:のドキュメントからhttp://pastie.org/244916

関連する問題