前言
站在用戶的角度思考問題,與客戶深入溝通,找到都蘭網(wǎng)站設(shè)計與都蘭網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋都蘭地區(qū)。WebView就是一個內(nèi)嵌瀏覽器控件,在iOS中主要有兩種WebView:UIWebView和WKWebView,UIWebView是iOS2之后開始使用,WKWebView是在iOS8開始使用,WKWebView將逐步取代笨重的UIWebView。
由于項目需要,新近實現(xiàn)了一個長截圖庫 SnapshotKit。其中,需要支持 UIWebView、WKWebView 組件生成長截圖。為了實現(xiàn)這個特性,查閱了很多資料,同時也做了不同的新奇思路嘗試,最終實現(xiàn)了一個新的、取巧的技術(shù)方案。
以下主要總結(jié)了在“WebView生成長截圖”需求方面,“網(wǎng)上已有方案”和“我的全新方案”的各自實現(xiàn)要點(diǎn)和優(yōu)缺點(diǎn)。
WebView生成長截圖的已有方案
根據(jù) Google 所搜索到的資料,目前iOS WebView生成長截圖的方案主要有2種:
下面將會簡述方案一和方案二的具體實現(xiàn)。
方案一:修改Frame,截圖組件
方案一的實現(xiàn)要點(diǎn)在于:修改 webView.scrollView 的 frameSize 為 contentSize,然后對整個 webView.scrollView 進(jìn)行截圖。
不過,這個方案只適用 UIWebView 組件,因為其是一次性加載網(wǎng)頁所有的內(nèi)容。而 WKWebView 組件,為了節(jié)省內(nèi)存,加載網(wǎng)頁內(nèi)容時,只加載可視部分——這一點(diǎn)類似 UITableView 組件。在修改webView.scrollView 的 frameSize 后,立即執(zhí)行了截圖操作, 這時候,WKWebView由于還沒把網(wǎng)頁的內(nèi)容加載出來,導(dǎo)致生成的長截圖是空白的。
方案一核心代碼如下:
extension UIScrollView { public func takeSnapshotOfFullContent() -> UIImage? { let originalFrame = self.frame let originalOffset = self.contentOffset self.frame = CGRect.init(origin: originalFrame.origin, size: self.contentSize) self.contentOffset = .zero let backgroundColor = self.backgroundColor ?? UIColor.white UIGraphicsBeginImageContextWithOptions(self.bounds.size, true, 0) guard let context = UIGraphicsGetCurrentContext() else { return nil } context.setFillColor(backgroundColor.cgColor) context.setStrokeColor(backgroundColor.cgColor) self.drawHierarchy(in: self.bounds, afterScreenUpdates: true) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() self.frame = originalFrame self.contentOffset = originalOffset return image } }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。