iOS 對當(dāng)前webView進(jìn)行截屏的方法
UIWebView和WKWebView的截屏有所區(qū)別:
UIWebView:
func getImage(context: ServiceExecuteContext) -> UIImage {
//創(chuàng)建一個(gè)基于位圖的圖形上下文并指定大小
UIGraphicsBeginImageContextWithOptions(context.fromViewController.webView.bounds.size, true, 0)
//renderInContext呈現(xiàn)接受者及其子范圍到指定的上下文
context.fromViewController.webView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
//返回一個(gè)基于當(dāng)前圖形上下文的圖片
let image = UIGraphicsGetImageFromCurrentImageContext()
//移除棧頂?shù)幕诋?dāng)前位圖的圖形上下文
UIGraphicsEndImageContext()
//let imagRef = CGImageCreateWithImageInRect((image?.CGImage)!, context.fromViewController.webView.bounds)
//let newImage = UIImage.init(CGImage: imagRef!)
//UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);//保存圖片到照片庫
return image!
}
UIGraphicsBeginImageContext()方法傳入唯一參數(shù),是一個(gè)CGSize變量,用來指定圖形context的大小,所以獲取屏幕截圖的時(shí)候這個(gè)size該是屏幕的大小。其實(shí)了解了這個(gè)過程,就知道這個(gè)方法可以獲取任意區(qū)域的截圖,當(dāng)然是必須當(dāng)前頁面的一部分。你需要截取哪個(gè)view的圖像,就讓這個(gè)view的layer調(diào)用renderInContext把圖形渲染進(jìn)當(dāng)前圖形context。
WKWebView:
當(dāng)我嘗試去截取WKWebView的圖。截圖的結(jié)果返回給我的就僅僅只是一張背景圖, 顯然截圖失敗。通過搜索StackOverflow和Google, 我發(fā)現(xiàn)WKWebView并不能簡單的使用layer.renderInContext的方法去繪制圖形。如果直接調(diào)用layer.renderInContext需要獲取對應(yīng)的Context, 但是在WKWebView中執(zhí)行UIGraphicsGetCurrentContext()的返回結(jié)果是nil
StackOverflow提供了一種解決思路是使用UIView的drawViewHierarchyInRect方法去截取屏幕視圖。通過直接調(diào)用WKWebView的drawViewHierarchyInRect方法(afterScreenUpdates參數(shù)必須為true), 可以成功的截取WKWebView的屏幕內(nèi)容
func getImage(context: ServiceExecuteContext) -> UIImage {
UIGraphicsBeginImageContextWithOptions(context.fromViewController.webView.bounds.size, true, 0)
for subView: UIView in context.fromViewController.webView.subviews {
subView.drawViewHierarchyInRect(subView.bounds, afterScreenUpdates: true)
}
//UIApplication.sharedApplication().keyWindow?.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//let imagRef = CGImageCreateWithImageInRect((image?.CGImage)!, context.fromViewController.webView.bounds)
//let newImage = UIImage.init(CGImage: imagRef!)
return image!
}
以上這篇iOS 對當(dāng)前webView進(jìn)行截屏的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
iOS開發(fā)實(shí)現(xiàn)搜索框(UISearchController)
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)實(shí)現(xiàn)搜索框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
iOS應(yīng)用開發(fā)中使用Auto Layout來適配不同屏幕尺寸
這篇文章主要介紹了iOS應(yīng)用開發(fā)中使用Auto Layout來適配不同屏幕尺寸的方法,根據(jù)Xcode IDE下的實(shí)際調(diào)試步驟講解其用法,需要的朋友可以參考下2016-03-03
iOS tableView右側(cè)索引視圖狀態(tài)獲取的方法實(shí)例
tableView用于顯示一個(gè)垂直滾動的單元格數(shù)(通常為可重復(fù)使用的單元格)組成的視圖,這篇文章主要給大家介紹了關(guān)于iOS tableView右側(cè)索引視圖狀態(tài)獲取的相關(guān)資料,需要的朋友可以參考下2021-07-07
iOS動態(tài)驗(yàn)證碼實(shí)現(xiàn)代碼
本文通過實(shí)例代碼給大家介紹了ios動態(tài)驗(yàn)證碼的實(shí)現(xiàn)方法,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-04-04
Objective-C中使用NSString類操作字符串的方法小結(jié)
這篇文章主要介紹了Objective-C中使用NSString類操作字符串的方法小結(jié),文中講到了字符串的分割和拼接等一些常見的用法,需要的朋友可以參考下2016-01-01
淺談iOS解析HTMl標(biāo)簽以及開發(fā)中的一些坑
這篇文章主要介紹了淺談iOS解析HTMl標(biāo)簽以及開發(fā)中的一些坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12

