iOS 對(duì)當(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);//保存圖片到照片庫(kù)
return image!
}
UIGraphicsBeginImageContext()方法傳入唯一參數(shù),是一個(gè)CGSize變量,用來(lái)指定圖形context的大小,所以獲取屏幕截圖的時(shí)候這個(gè)size該是屏幕的大小。其實(shí)了解了這個(gè)過(guò)程,就知道這個(gè)方法可以獲取任意區(qū)域的截圖,當(dāng)然是必須當(dāng)前頁(yè)面的一部分。你需要截取哪個(gè)view的圖像,就讓這個(gè)view的layer調(diào)用renderInContext把圖形渲染進(jìn)當(dāng)前圖形context。
WKWebView:
當(dāng)我嘗試去截取WKWebView的圖。截圖的結(jié)果返回給我的就僅僅只是一張背景圖, 顯然截圖失敗。通過(guò)搜索StackOverflow和Google, 我發(fā)現(xiàn)WKWebView并不能簡(jiǎn)單的使用layer.renderInContext的方法去繪制圖形。如果直接調(diào)用layer.renderInContext需要獲取對(duì)應(yīng)的Context, 但是在WKWebView中執(zhí)行UIGraphicsGetCurrentContext()的返回結(jié)果是nil
StackOverflow提供了一種解決思路是使用UIView的drawViewHierarchyInRect方法去截取屏幕視圖。通過(guò)直接調(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 對(duì)當(dāng)前webView進(jìn)行截屏的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
講解iOS開(kāi)發(fā)中UITableView列表設(shè)計(jì)的基本要點(diǎn)
這篇文章主要介紹了講解iOS開(kāi)發(fā)中UITableView列表設(shè)計(jì)的基本要點(diǎn),其中對(duì)列表行操作的常用操作舉例是iOS開(kāi)發(fā)中經(jīng)常用到的基礎(chǔ),需要的朋友可以參考下2016-01-01
實(shí)例解析iOS開(kāi)發(fā)中系統(tǒng)音效以及自定義音效的應(yīng)用
這篇文章主要介紹了iOS開(kāi)發(fā)中系統(tǒng)音效以及自定義音效的應(yīng)用,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-10-10
iOS開(kāi)發(fā)中runtime常用的幾種方法示例總結(jié)
Runtime也就是所謂的“運(yùn)行時(shí)”,因?yàn)槭窃谶\(yùn)行時(shí)實(shí)現(xiàn)的。下面這篇文章主要給大家介紹了關(guān)于iOS開(kāi)發(fā)中runtime常用的幾種方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-08-08
iOS開(kāi)發(fā)中使用SQL語(yǔ)句操作數(shù)據(jù)庫(kù)的基本用法指南
這篇文章主要介紹了iOS開(kāi)發(fā)中使用SQL語(yǔ)句操作數(shù)據(jù)庫(kù)的基本用法指南,包括一些常用SQL語(yǔ)句的整理,需要的朋友可以參考下2015-12-12
ios開(kāi)發(fā)加載webview顯示進(jìn)度條實(shí)例
本篇文章主要介紹了ios開(kāi)發(fā)加載webview顯示進(jìn)度條實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
iOS中利用CAEmitterLayer實(shí)現(xiàn)粒子動(dòng)畫詳解
粒子效果應(yīng)該對(duì)現(xiàn)在很多人來(lái)說(shuō)并不陌生,我們之前也分享了一些相關(guān)文章,下面這篇文章主要給大家介紹了關(guān)于iOS中利用CAEmitterLayer實(shí)現(xiàn)粒子動(dòng)畫的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。2017-06-06
詳解Swift中對(duì)C語(yǔ)言接口緩存的使用以及數(shù)組與字符串轉(zhuǎn)為指針類型的方法
這篇文章主要介紹了詳解Swift中對(duì)C語(yǔ)言接口緩存的使用以及數(shù)組與字符串轉(zhuǎn)為指針類型的方法的相關(guān)資料,這里提供簡(jiǎn)單實(shí)例,代碼注釋介紹也清楚,需要的朋友可以參考下2017-07-07

