iOS 对当前webView进行截屏的方法

发布时间 - 2026-01-11 00:54:28    点击率:

UIWebView和WKWebView的截屏有所区别:

UIWebView:

func getImage(context: ServiceExecuteContext) -> UIImage { 
    //创建一个基于位图的图形上下文并指定大小 
    UIGraphicsBeginImageContextWithOptions(context.fromViewController.webView.bounds.size, true, 0) 
    //renderInContext呈现接受者及其子范围到指定的上下文 
    context.fromViewController.webView.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
    //返回一个基于当前图形上下文的图片 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    //移除栈顶的基于当前位图的图形上下文 
    UIGraphicsEndImageContext() 
     
    //let imagRef = CGImageCreateWithImageInRect((image?.CGImage)!, context.fromViewController.webView.bounds) 
    //let newImage = UIImage.init(CGImage: imagRef!) 
    //UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);//保存图片到照片库 
    return image! 
  } 

UIGraphicsBeginImageContext()方法传入唯一参数,是一个CGSize变量,用来指定图形context的大小,所以获取屏幕截图的时候这个size该是屏幕的大小。其实了解了这个过程,就知道这个方法可以获取任意区域的截图,当然是必须当前页面的一部分。你需要截取哪个view的图像,就让这个view的layer调用renderInContext把图形渲染进当前图形context。

WKWebView:

当我尝试去截取WKWebView的图。截图的结果返回给我的就仅仅只是一张背景图, 显然截图失败。通过搜索StackOverflow和Google, 我发现WKWebView并不能简单的使用layer.renderInContext的方法去绘制图形。如果直接调用layer.renderInContext需要获取对应的Context, 但是在WKWebView中执行UIGraphicsGetCurrentContext()的返回结果是nil

StackOverflow提供了一种解决思路是使用UIView的drawViewHierarchyInRect方法去截取屏幕视图。通过直接调用WKWebView的drawViewHierarchyInRect方法(afterScreenUpdates参数必须为true), 可以成功的截取WKWebView的屏幕内容

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 对当前webView进行截屏的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# ios  # webview  # 截屏  # iOS开发中WebView的基本使用方法简介  # IOS中UIWebView加载Loading的实现方法  # IOS中的webView加载HTML  # 轻松理解iOS 11中webview的视口  # 详解iOS webview加载时序和缓存问题总结  # iOS Webview自适应实际内容高度的4种方法详解  # ios开发加载webview显示进度条实例  # iOS获取cell中webview的内容尺寸  # iOS去除Webview键盘顶部工具栏的方法  # 给大家  # 是一个  # 直接调用  # 当我  # 希望能  # 这篇  # 并不能  # 创建一个  # 小编  # 大家多多  # 移除  # 其子  # 就知道  # 我发现  # 但是在  # 结果是  # fromViewController  # UIGraphicsBeginImageContextWithOptions  # gt  # ServiceExecuteContext 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 怎么用AI帮你为初创公司进行市场定位分析?  南京网站制作费用,南京远驱官方网站?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  如何快速生成凡客建站的专业级图册?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  如何在阿里云购买域名并搭建网站?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  HTML 中动态设置元素 name 属性的正确语法详解  Bootstrap整体框架之CSS12栅格系统  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Mybatis 中的insertOrUpdate操作  如何在阿里云ECS服务器部署织梦CMS网站?  利用python获取某年中每个月的第一天和最后一天  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel如何使用Gate和Policy进行授权?(权限控制)  香港服务器租用每月最低只需15元?  如何快速搭建高效香港服务器网站?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何利用DOS批处理实现定时关机操作详解  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  iOS中将个别页面强制横屏其他页面竖屏  EditPlus中的正则表达式 实战(2)  Android利用动画实现背景逐渐变暗  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  ,交易猫的商品怎么发布到网站上去?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  实例解析Array和String方法  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel distinct去重查询_Laravel Eloquent去重方法  如何在建站主机中优化服务器配置?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Laravel怎么使用Intervention Image库处理图片上传和缩放  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  轻松掌握MySQL函数中的last_insert_id()  如何在云服务器上快速搭建个人网站?  高防服务器租用指南:配置选择与快速部署攻略  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  java中使用zxing批量生成二维码立牌  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel安装步骤详细教程_Laravel环境搭建指南