文档章节

使用UIWebView截取整个网页

久伴旧伴
 久伴旧伴
发布于 2017/07/11 19:12
字数 346
阅读 1
收藏 0
点赞 0
评论 0

从业务需要说起,需要把整个webview里面渲染的页面 截图存成一张图片。上传服务器。

首先页面要加载完成。应该在webViewDidFinishLoad 进行截图的操作。

 

方法如下:

 

    //1.开启位图上下文.

    UIGraphicsBeginImageContextWithOptions(self.webView.bounds.size,NO,0);

   

    //2.把控制器webView的内容绘制到上下文当中.layer是不能够直接绘制的.要用渲染的方法才能够让它绘制到上下文当中.

   

    CGContextRef ctx =UIGraphicsGetCurrentContext();

   

    [self.view.layer renderInContext:ctx];

   

    //3.生成一张图片

   

    UIImage *newImage =UIGraphicsGetImageFromCurrentImageContext();

   

    //4.关闭上下文

   

    UIGraphicsEndImageContext();

   

    //5.1图片转成二进制流存入data

   

    NSData*data =UIImagePNGRepresentation(newImage);

   

    [data writeToFile:@"/Users/yx/Desktop/newImage.png"atomically:YES];

   

    //5.2图片存入NSDocument

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

   

    NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"newImage.png"]]; 

 

【这样操作有一个问题,上下文开启的时候有一个参数size。如果只是手机屏幕的大小,那么webview里面 只能截取一屏的内容。】

 

为了截全貌,只需要把它全部展示出来,即把UIWebView.size变成UIWebView.scrollview.contentSize,完成截图操作后,见【代码1】

再把UIWebView.scrollview.contentOffset设置为(0,0)、把UIWebView.size还原 保证可以正常的滑动。见【代码2】

 

【代码1】:

    //把webview的frame改变成内容的大小 

   

    self.webView.frame = CGRectMake(0, 0, kScreenWidth, self.webView.scrollView.contentSize.height);

 

【代码2】:

    //把webview的frame还原 并改变它的contentOffset为(0, 0)

 

    self.webView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);

    

    _webView.scrollView.contentOffset = CGPointMake(0, 0);

© 著作权归作者所有

共有 人打赏支持
久伴旧伴
粉丝 4
博文 19
码字总数 6522
作品 0
沧州
程序员
iOS之路21-JS与OC交互

一: OC执行JS代码 1.webView加载请求, request, 控制器成为webView的代理, 监听网页加载完毕会调用代理方法 / 网页加载完毕 / - (void)webViewDidFinishLoad:(UIWebView *)webView { } 2.让页...

Eric-osc ⋅ 2016/02/28 ⋅ 0

iOS与JavaScript交互总结

最近由于公司业务需要,需要在移动端调用JS去解析大众点评网页,同时抓取评论相关内容。对iOS与JS交互进行了研究,总结一下。 技术点总结: 首先,OC与JS的交互需要用到UIWebView来实现。 技...

秦无炎 ⋅ 2016/09/28 ⋅ 0

疯狂ios讲义之网页控件(UIWebView)

通过使用UIWebView控件,可以实现一个内置的浏览器(类似于Safari),而且可以直接将这个浏览器内嵌到应用的任意位置,因此非常方便。 UIWebView直接继承了UIView基类,一般不可以与用户交互...

博文视点 ⋅ 2014/01/26 ⋅ 0

iOS UIWebView 使用大全

一、UIWebView的基础使用 以上是IOS中UIWebView的基础使用要点详解,接下来一些UIWebView的常用注意点。 二、IOS中UIWebView常用注意点: 1、与UIWebView进行交互,调用web页面中的需要传参的...

朝雨晚风 ⋅ 2016/08/15 ⋅ 0

ios开发,javascript直接调用oc代码而非通过改变url回调方式

之前一个ios项目中,需要通过UIWebview来打开一个静态页面,并在静态页面中 调用相关object-c代码。 一、以前使用js调用object-c的方法 关于如何使用javascript调用object-c中的函数和方法,...

北方人在上海 ⋅ 2016/04/21 ⋅ 0

与webView进行交互,webView小记

一、与webView进行交互,调用web页面中的需要传参的函数时,参数需要带单引号,或者双引号(双引号需要进行转义在转义字符前加),在传递json字符串时不需要加单引号或双引号。 -(void)webVi...

山不在高有仙则名 ⋅ 2012/08/04 ⋅ 1

UIWebView全解

是iOS内置的浏览器控件,可以浏览网页、打开文档等能够加载html/htm、pdf、docx、txt等格式的文件系统自带的Safari浏览器就是通过UIWebView实现的 MIME的英文全称是“Multipurpose Internet...

哥特复心 ⋅ 2013/12/30 ⋅ 0

WebView中取网页的一些内容

经常在iOS开发中会碰到取网页中的一些数据的问题,比如取这个网页的标题,特定标签的内容等等,一般有2种做法: 1)如果页面是符合DOM结构的,可以直接取,使用UIWebView的 stringByEvaluati...

BluesChow ⋅ 2015/10/14 ⋅ 0

iOS的Cookie存取看我绝对够!!

2016.06.29 当前一些公司为了快速出一款app,很多时候采用UINavigationController+WebView或者NavigationController+UITabbarVC+WebView的方式,这样就不可避免的需要使用cookie与Html5交互,...

si1ence ⋅ 2017/12/14 ⋅ 0

UIWebView的使用

一、创建UIWebView [java] view plaincopyprint? CGRect bouds = [[UIScreen manScreen]applicationFrame]; UIWebView* webView = [[UIWebView alloc]initWithFrame:bounds]; CGRect bouds =......

junwong ⋅ 2012/03/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

x64: TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. ; Last update: 2/1/02 ;.MODEL flat,stdcall x64 not su......

simpower ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

你真的明白RPC 吗?一起来探究 RPC 的实质

你真的明白RPC 吗?一起来探究 RPC 的实质 不论你是科班出身还是半路转行,这么优秀的你一定上过小学语文,那么对扩句和缩句你一定不陌生。缩句就是去除各种修饰提炼出一句话的核心,而不失基...

AI9o後 ⋅ 昨天 ⋅ 0

z-index设置失效?

今天碰到了一个问题,就是在给li设置提示框的时候,有用到遮罩效果,本来想把对应的出现在最顶层,可是不管将li设置的z-index值设为多大,li都没有出现在遮罩层之上。 我在网上查了z-index设...

IrisHunag ⋅ 昨天 ⋅ 0

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

CyclicBarrier、CountDownLatch以及Semaphore是Java并发包中几个常用的并发组件,这几个组件特点是功能相识很容易混淆。首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设...

申文波 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部