iOS 长截图

背景

项目需求需对视图进行截图,但视图中部分文本内容返回的格式是Html,需要通过WKWebView对Html进行加载展示,但对整块视图进行截图WKWebView出现部分内容展示空白。

//  截图代码
    UIGraphicsBeginImageContextWithOptions(self.headerView.frame.size, NO, [UIScreen mainScreen].scale);
    [self.headerView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

解决方式

方式一: 使用UIWebView替代WKWebView

使用UIWebView加载Html可通过上图代码进行截图,并无出现部分截取空白的情况,但是现在Apple在用WKWebView替换UIWebView后,并且规定2020年4月后新上架的包如果包含UIWebView将无法提交构建版本,而且2020年12月份以后已经上架的包也将无法提交构建版本。使用UIWebView替代的这条路给堵的死死的。

方式二:更改Frame

根据苹果的官方文档,WKWebView在加载优化上优于UIWebView难道就是优化在这个地方😑?笔者不知。
本来想着是不是因为frame与contentSize不一致导致的滑动渲染,想通过在截图前保存View的frame以及webView的offset,再完成截图后进行恢复,但是由于项目本身的frame与contentSize的宽高都是一样的😑。

方式三:滑动截图拼接

既然WKWebView是滑动渲染,那笔者就按照你的渲染模式去截图了。滑动截图的话,在尝试的过程中发现,我视图滚动的时候才能截图,这让用户感觉肯定很不爽,既然你明面上不想让用户感知,那只能偷偷的做了,这时候就需要一张视图遮盖在屏幕上以达到用户无感知。一切就是这么巧 ** UIView+UISnapshotting分类的- (nullable UIView )snapshotViewAfterScreenUpdates:(BOOL)afterUpdates API_AVAILABLE(ios(7.0))* 帮你实现了这张遮罩视图的方法。当然你也可以自己添加视图实现。
在这里插入图片描述

滑动截图核心代码:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值