2011-03-02 10 views
1

このメソッドを使用しようとしています。UIWebViewのレイヤーをイメージとして保存するように構成しました。それは動作していますが、私はUIViewにロードされているSVGは、UIWebViewの背景のみ、画像でレンダリングされていません。SVGファイルを含むUIWebViewのレイヤーをレンダリングする

+ (BOOL)imageFromSVGinWebView:(UIView *)theView usePNG:(BOOL)usePNG; { 
    UIGraphicsBeginImageContext(theView.frame.size); 
    [theView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *layerImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    NSData *layerIMGData = nil; 
    NSString *pathComponent = nil; 
    if (usePNG) { 
     layerIMGData = UIImagePNGRepresentation(layerImage); 
     pathComponent = @"png"; 
    }else { 
     layerIMGData = UIImageJPEGRepresentation(layerImage,1.0f); 
     pathComponent = @"jpg"; 
    } 
    NSString *appFile = [[CCFileManagement conversionsDirectory] stringByAppendingPathComponent:String(@"img.%@",pathComponent)]; 
    NSError *error = nil; 
    BOOL returnBOOL = [layerIMGData writeToFile:appFile options:NSDataWritingAtomic error:&error]; 
    if(error != nil) 
     ILogPlus(@"%@",error); 
    return returnBOOL; 
} 

を要約すると、私はのUIWebViewにSVGをロードした、のUIWebViewは画像として、画像を開いて、画像がそれでSVGを持っていないことを保存します。私は他のビューでこれを成功させました.SVGまたはUIWebViewについては何かが異なります。

更新: 画像保存コードを実行するのにアプリが数秒間待つようにするために遅延を追加すると、機能します。そのコードをwebViewDidFinishLoadに入れても機能しません。明らかに、webViewDidFinishLoadはSVGを数えません。

答えて

1

私はあなたが0.1秒の遅延を追加する場合、それが動作することを発見した

- (void)webViewDidFinishLoad:(UIWebView *)webView; { 
    [self performSelector:@selector(postLoadActions:) withObject:webView afterDelay:0.1f]; 
} 


- (void)postLoadActions:(UIWebView *)webView; { 
    if (![CCConversion imageFromSVGinWebView:webView usePNG:YES]) { 
     ILogPlus(@"Didn't work"); 
    } 
    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[CCFileManagement conversionsDirectory] error:NULL]; 
    ILogPlus(@"%@",array); 
    //[webView removeFromSuperview]; 
    [webView release]; 

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[[CCFileManagement conversionsDirectory] stringByAppendingPathComponent:@"img.png"]]]; 
    imageView.frame = CGRectMake(90, 90, imageView.frame.size.width, imageView.frame.size.height); 
    imageView.backgroundColor = [UIColor clearColor]; 
    [self.view performSelector:@selector(addSubview:) withObject:imageView afterDelay:2.0f]; 
    [imageView release]; 
} 
関連する問題