UIWebView&WKWebView如何截圖

先看效果


ScreenShotDemo.gif

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)喜歡

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末责蝠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子萎庭,更是在濱河造成了極大的恐慌霜医,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驳规,死亡現(xiàn)場(chǎng)離奇詭異肴敛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)达舒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門值朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叹侄,“玉大人,你說我怎么就攤上這事昨登≈捍” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵丰辣,是天一觀的道長(zhǎng)撒强。 經(jīng)常有香客問我,道長(zhǎng)笙什,這世上最難降的妖魔是什么飘哨? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮琐凭,結(jié)果婚禮上芽隆,老公的妹妹穿的比我還像新娘。我一直安慰自己统屈,他們只是感情好胚吁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愁憔,像睡著了一般腕扶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吨掌,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天半抱,我揣著相機(jī)與錄音,去河邊找鬼膜宋。 笑死窿侈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秋茫。 我是一名探鬼主播棉磨,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼学辱!你這毒婦竟也來了乘瓤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤策泣,失蹤者是張志新(化名)和其女友劉穎衙傀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萨咕,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡统抬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聪建。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钙畔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出金麸,到底是詐尸還是另有隱情擎析,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布挥下,位于F島的核電站揍魂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏棚瘟。R本人自食惡果不足惜现斋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偎蘸。 院中可真熱鬧庄蹋,春花似錦、人聲如沸迷雪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽振乏。三九已至,卻和暖如春秉扑,著一層夾襖步出監(jiān)牢的瞬間慧邮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工舟陆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留误澳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓秦躯,卻偏偏與公主長(zhǎng)得像忆谓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踱承,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容