2012-04-19 68 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; 
}