iosWKWebView截图
来源:互联网 发布:类似photosynth的软件 编辑:程序博客网 时间:2024/05/16 10:17
本文得从业务需要说起;
最近一个研发需求需要,由于想要便捷开发,不用在服务端跟着客户端一起接受苹果审核的煎熬,决定把部分业务(主要是报表)放置在服务端开发,前端只需要搭载一个入口即可;最开始果断采用了UIWebView做Web部分的容器,(可能有其他更好的方案,暂时没有想到),然而一个事实是 UIWebView本身就有BUG,关于UIWebView内存占用很大而且泄露问题参考这几个博客包括Stack Overflow的大牛们都有说明
http://blog.csdn.net/cjsen/article/details/7449561
http://my.oschina.net/are1OfBlog/blog/387695
上述提到的解决方案其实都是不可以解决,亲测不可以;该篇说的最清楚http://www.jianshu.com/p/9bc5a74baebf(感谢该篇博主)没有让我再试图解决UIWebView的内存上浪费精力;考虑到ios7的占有率,用WKWebView不失为一种折中的解决方案;所以采用了该篇提供解决方案,也就是重写一个WebView 根据系统版本去判定到底是UIWebView还是WKWebView,内存泄露问题就只在于ios8以下了,算是一个较为折中的方案;然而业务需要报表能在各种主流社交平台快速传播,截整个报表这个事在WKWebView上就那么不友好了;
UIWebView的截图相当简单,为了截全貌,只需要把它全部展示出来,即把UIWebView.size变成UIWebView.scrollview.contentSize,如果有滚动发生,再把UIWebView.scrollview.contentOffset设置为(0,0)再在合适的时机把他们还原回来;主要的截图代码通过上layer渲染和下文截图
UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.width,view.height), NO, 0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * bigImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
然而在WKWebView上.用这个方法截图出来的是一片背景色,这里参考http://blog.startry.com/2016/02/26/Screenshots-WKWebView/ 感谢博主的专研;最后用了博主的swift库,其实还是有bug,就是会分设备型号;我当时的测试情况是iphone5以及5以下的设备截图出来有一片区域没有截到(测试的设备有限,5s,6plus,6s,6splus都可以用那个swift库解决);最后经过多方尝试,其中过程一一略去在此不述;最终的解决方案我直接贴代码-(void)shareClick:(UIBarButtonItem *)item{
orignSize = _web.scrollView.contentSize;
originOffset = _web.scrollView.contentOffset;
if(IOS_8_OR_LATER)//分享WKWebView
{
NSString * type = [NSString deviceString];
if ([type isEqualToString:@"iPhone 5"]||[type isEqualToString:@"iPhone 5c"]||[type isEqualToString:@"iPhone 4s"]) {
temperView = [_web snapshotViewAfterScreenUpdates:YES];
[_web addSubview:temperView];
[_web.scrollView scrollRectToVisible:CGRectMake(0, _web.scrollView.contentSize.height-_web.height, _web.width, _web.height) animated:NO];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
_web.scrollView.contentOffset = CGPointMake(0, 0);
_web.size = _web.scrollView.contentSize;
UIGraphicsBeginImageContext(_web.scrollView.contentSize);
UIGraphicsBeginImageContextWithOptions(_web.scrollView.contentSize, NO, 0);
[_web drawViewHierarchyInRect:_web.bounds afterScreenUpdates:YES];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});
}else
{
[self swfitCapture];
}
}else
{
[self catptureImage];
}
}
-(void)swfitCapture//swfit库方法
{
__weak FormsStaticsDetailViewController *weakSelf = self;
WKWebView *v = (WKWebView*)_web;
[v swContentCapture:^(UIImage * img) {
[weakSelf realShare:img];
}];
-(void)catptureImage
{UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.width,view.height), NO, 0);
[
_web.scrollView.contentOffset = CGPointMake(0, orignSize.height);
_web.size = _web.scrollView.contentSize;
_web.scrollView.contentOffset = CGPointMake(0, 0);
_web.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * bigImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
- iosWKWebView截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 截图
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- GPUImage相机组合滤镜
- spring mvc 提交表单实现文件上传服务器
- 大数相乘
- Statistics(统计varnish相关数据)
- iosWKWebView截图
- DownLoadManager的使用
- 电气自动化专业课程控制教育现状思考
- Maven搭建SpringMVC+Mybatis项目详解
- java(19)--数据库事务隔离级别
- iOS面试题
- java自学(第一周)
- [leetcode] 243. Shortest Word Distance 解题报告
- Eclipse中修改SVN用户名和密码方法