JoshPell

人生只有必然,没有偶然

欢迎来到我的个人网站~


关于截取app页面长图

前几天听朋友说他们项目准备加一个功能,就是将页面所有的内容截取出来生成一张长图,我想这是什么需求,有页面分享为嘛要分享长图o(╯□╰)o。后来某天在公司浏览简书的文章的时候无意发现了简书居然有这个功能,然后赶紧打开简书的app,果然app也有这个截长图的功能,事实证明我毕竟不是产品经理的料。后来就开始研究这个东西,查了一些绘图的资料后终于找到方法了,试验后果然可行。

普通截图

CALayer类有个方法renderInContext:,这个方法用来截取layer层的图像,传入一个图形上下文,最后再通过图形上下文获取图片的方法UIGraphicsGetImageFromCurrentImageContext()就可以拿到想要截取的图片了,下面就是截取普通图层的代码:

UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();

下面来说一下UIGraphicsBeginImageContextWithOptions(),这个方法作用是开启图形上下文。第一个参数控制截图的大小,一般跟view大小一致,若小于view大小,图片最后会丢失view右边或者下部的一些图像;第二个是透明开关,一般传YES截取的图片质量会高点;第三个参数是缩放因子,一般传1.0,其他的可以自己试试。

截取长图(这里针对tableView和collectionView)

可能你不信,截取长图跟上面方法一样,只需要在开启图形上下文时将size设置为tableView或collectionView的contentSize即可,并且将tableview滚到顶部再开始截图,代码如下:

UIGraphicsBeginImageContextWithOptions(tableView.contentSize , YES, 0.0);
tableView.contentOffset = CGPointZero;
tableView.frame = CGRectMake(0, 0, tableView.contentSize.width, tableView.contentSize.height);
[tableView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();

怎么样很简单吧,你还可以下载我在github上放置的demo来看看,欢迎star!


打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by 谭健,分享从这里开始,精彩与您同在


正在加载中……