先看效果
1 什么時(shí)候會(huì)用到這個(gè)溉苛?
分享缩抡,目前筆者能想到的只有分享歹叮,因?yàn)橐醚??贿堰。
2 為什么要寫這個(gè)辙芍?
UIWebView的截圖功能還是很容易實(shí)現(xiàn)的,可是WKWebView的截圖,嗯,一片灰色故硅。庶灿。。
在筆者逛了Stack Overflow,里面并沒有很好的方法吃衅,于是往踢,只能自己動(dòng)手了,so徘层,可能方法并不是很好峻呕,但是足矣解決問題,有時(shí)間再研究趣效。
3 開工
- 3.1 說說UIKit的截圖(其實(shí)是繪圖)
3.1.1 創(chuàng)建一個(gè)基于位圖的上下文(context),并將其設(shè)置為當(dāng)前上下文
(1)UIGraphicsBeginImageContext(CGSize size)
(2)UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)
區(qū)別:
UIGraphicsBeginImageContext
參數(shù)size為新創(chuàng)建的位圖上下文的大小山上。該函數(shù)的功能同UIGraphicsBeginImageContextWithOptions的功能相同,相當(dāng)與UIGraphicsBeginImageContextWithOptions的opaque參數(shù)為NO,scale因子為1.0英支。
UIGraphicsBeginImageContextWithOptions
參數(shù)size——同UIGraphicsBeginImageContext
參數(shù)opaque—透明開關(guān),如果圖形完全不用透明哮伟,設(shè)置為YES以優(yōu)化位圖的存儲(chǔ)干花。
參數(shù)scale—–縮放因子
3.1.2獲取上下文
UIGraphicsGetCurrentContext()
UIGraphicsGetCurrentContext 來取得上下文,這個(gè)上下文表示當(dāng)前的view的size大小
3.1.3繪制
- (void)renderInContext:(CGContextRef)cox;
參數(shù)就是獲取的上下文楞黄,指明繪制的地方
3.1.4完成
UIGraphicsGetImageFromCurrentImageContext()
得到繪制好的上下文
- 3.2 無(忘了要寫啥了)
4 UIWebView的截圖
網(wǎng)上的很多方法就是循環(huán)遍歷子視圖池凄,然后組合起來,個(gè)人覺得不夠簡(jiǎn)單鬼廓,我不會(huì)承認(rèn)用網(wǎng)上的方法我失敗了才出此下策的肿仑。
在UIWebView加載完成的代理方法里面
-(void)webViewDidFinishLoad:(UIWebView \*)webView
{
[self saveImageToPhotos: [self screenShotWithScrollView:webView.scrollView]];
webView.delegate = nil;
[webView removeFromSuperview];
webView = nil;
}
封裝截圖方法
- (UIImage *)screenShotWithScrollView:(UIScrollView *)scrollView
{
UIImage* image;
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, NO, [UIScreen mainScreen].scale);
{
CGPoint savedContentOffset = scrollView.contentOffset;
CGRect savedFrame = scrollView.frame;
scrollView.contentOffset = CGPointZero;
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
}
UIGraphicsEndImageContext();
if (image != nil)
{
return image;
}
return nil;
}
5 WKWebView的截圖
同上,嗯碎税,是的尤慰,就是用UIWebView請(qǐng)求一遍再截取UIWebView的圖就行,在截完圖釋放就好雷蹂,看了一下運(yùn)存伟端,暫時(shí)沒問題
注:在UIWebView請(qǐng)求完數(shù)據(jù)的代理方法里面再截圖
注:在UIWebView請(qǐng)求完數(shù)據(jù)的代理方法里面再截圖
注:在UIWebView請(qǐng)求完數(shù)據(jù)的代理方法里面再截圖
完結(jié):如有更好的方法請(qǐng)多多指教
20161117日更新-----------------------
封裝了截圖方法,一句話代碼截圖
/**
截屏
@param url 截屏的url
@param successBlock 截屏成功的回調(diào)
@param failureBlock 截屏失敗的回調(diào)
*/
-(void)capturePicShareWitchUrl:(NSString*)url
success:(CapSuccessBlock) successBlock
failure:(CapFailureBlock) failureBlock;
慣例文末放Demo:https://github.com/yongliangP/WebViewCaptureDemo
碼字不容易匪煌,路過請(qǐng)喜歡