Рендеринг слоя UIWebView, который содержит файл SVG - PullRequest
1 голос
/ 02 марта 2011

Я пытаюсь использовать этот метод, который я создал, чтобы сохранить слой UIWebView в качестве изображения.Это работает, но SVG, который я загрузил в UIView, не отображается на изображении, а только фон 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;
}

Итак, я загрузил SVG в UIWebView, сохранилчто UIWebView как изображение открывало изображение, а изображение не содержит SVG.Я сделал это с другими представлениями успешно, что-то другое в SVG или UIWebView.

ОБНОВЛЕНИЕ: Если я добавлю задержку, чтобы приложение подождало несколько секунд, чтобы выполнить код сохранения изображения, то оно заработало.Помещение этого кода в webViewDidFinishLoad НЕ работает.Очевидно, что webViewDidFinishLoad не учитывает SVG.

1 Ответ

1 голос
/ 02 марта 2011

Я обнаружил, что если вы добавите задержку в 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...