2012-04-19 37 views
4

我能够捕捉整个网页的屏幕截图(包括屏幕外的内容)。这在模拟器上工作正常,但在设备上它崩溃了。请帮我看看下面的代码(browserView是UIWebview)。如何捕获UIWebview的所有内容截图?

UIImage *screenImage=[[UIImage alloc] init]; 
UIScrollView *browserScrollableView=[[UIScrollView alloc] init]; 
browserScrollableView=browserView.scrollView; 
UIGraphicsBeginImageContext(browserScrollableView.contentSize); 
CGPoint savedContentOffset = browserScrollableView.contentOffset; 
CGRect savedFrame = browserScrollableView.frame; 

browserScrollableView.contentOffset = CGPointZero; 
browserScrollableView.frame = CGRectMake(0, 0, browserScrollableView.contentSize.width, browserScrollableView.contentSize.height); 

[browserScrollableView.layer renderInContext: UIGraphicsGetCurrentContext()];  
screenImage = UIGraphicsGetImageFromCurrentImageContext(); 

browserScrollableView.contentOffset = savedContentOffset; 
browserScrollableView.frame = savedFrame; 
UIGraphicsEndImageContext(); 

NSLog(@"Captured image size is %f X %f",screenImage.size.width,screenImage.size.height); 

UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil); 
+0

http://stackoverflow.com/questions/469764/rendering-a-uiwebview-into-an-imagecontext – 2012-04-19 09:58:55

+0

@AnkitGupta谢谢。这种解决方案不会在所有情况下工作,因为所有网站的设计都不一样。如果网页没有body标签,并且正在根据某些js加载,那么这将不起作用(如果我没有错) – 2012-04-19 10:07:21

+0

是的Anil,你可以对,我没有使用它,但我试图解决你的问题,它在你的情况下工作? – 2012-04-19 10:09:54

回答

3

我使用这个功能,它的工作对我来说

-(UIImage*)captureScreen:(UIView*) viewToCapture 
{ 
    UIGraphicsBeginImageContext(viewToCapture.bounds.size); 
    [viewToCapture.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return viewImage; 
} 

参数“viewToCapture”将是网页视图。

+0

我想隐藏/越界内容也来自webview,这就是我使用scrollview的原因 – 2012-04-20 05:41:36

+0

抱歉的误解。 – 2012-04-21 21:59:38

1
browserScrollableView=browserView.scrollView; 

是NS_AVAILABLE_IOS(5_0);

检查您的设备的iOS版本。

+0

你可以添加更多信息来向OP解释你的建议吗 – 2012-10-05 16:12:06

+0

属性scrollView for UIWebView是NS_AVAILABLE_IOS(5_0); 尝试检查是否browserView respondeToSelector:@selector(scrollView) – user1723251 2012-10-06 11:43:06

4
+ (UIImage*) captureWebView: (UIWebView*)webView { 
    // capture webview 
    UIImage *img = nil; 
    UIGraphicsBeginImageContextWithOptions(webView.scrollView.contentSize, webView.scrollView.opaque, 0.0); 
    { 
     CGPoint savedContentOffset = webView.scrollView.contentOffset; 
     CGRect savedFrame = webView.scrollView.frame; 

     webView.scrollView.contentOffset = CGPointZero; 
     webView.scrollView.frame = CGRectMake(0, 0, webView.scrollView.contentSize.width, webView.scrollView.contentSize.height); 
     [webView.scrollView.layer renderInContext: UIGraphicsGetCurrentContext()]; 
     img = UIGraphicsGetImageFromCurrentImageContext(); 

     webView.scrollView.contentOffset = savedContentOffset; 
     webView.scrollView.frame = savedFrame; 
    } 
    UIGraphicsEndImageContext(); 
    return img; 
}