IOS UIview截图
UIview截图
(UIImage *)captureScreen {
UIGraphicsBeginImageContextWithOptions(self.frame.size, YES, 0.0f);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();return image;
}
第一种情形截图
这种是最最普通的截图,针对一般的视图上添加视图的情况,基本都可以使用。 源码:
/**
普通的截图
该API仅可以在未使用layer和OpenGL渲染的视图上使用
@return 截取的图片
*/
(UIImage *)nomalSnapshotImage
{
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, [UIScreen mainScreen].scale);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();return snapshotImage;
}
第二种情形截图
如果一些视图是用OpenGL渲染出来的,那么使用上面的方式就无法截图到OpenGL渲染的部分,这时候就要用到改进后的截图方案:
/**
针对有用过OpenGL渲染过的视图截图
@return 截取的图片
*/
(UIImage *)openglSnapshotImage
{
CGSize size = self.bounds.size;
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
CGRect rect = self.frame;
[self drawViewHierarchyInRect:rect afterScreenUpdates:YES];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();return snapshotImage;
}
第三种情形截图
有一些特殊的Layer(比如:AVCaptureVideoPreviewLayer 和 AVSampleBufferDisplayLayer) 添加到某个View 上后,使用上面的几种方式都无法截取到Layer上的内容,这个时候可以使用系统的一个API,但是该API只能返回一个UIView,返回的UIView 可以修改frame 等参数。
/**
截图
以UIView 的形式返回(_UIReplicantView)
@return 截取出来的图片转换的视图
*/
- (UIView *)snapshotView
{
UIView *snapView = [self snapshotViewAfterScreenUpdates:YES];
return snapView;
}
遗留问题: 通过方式三截取的UIView,无法转换为UIImage,我试过将返回的截图View写入位图再转换成UIImage,但是返回的UIImage 要么为空,要么没有内容。如果有人知道解决方案请告知我。
UIWebView的截图
去年在做蓝牙打印的时候,尝试过将UIWebView 的内容转换为UIImage,写过一个UIWebView的category,也算是对UIWebView 的截图,顺便也贴出来吧
(UIImage *)imageForWebView
{
// 1.获取WebView的宽高
CGSize boundsSize = self.bounds.size;
CGFloat boundsWidth = boundsSize.width;
CGFloat boundsHeight = boundsSize.height;// 2.获取contentSize
CGSize contentSize = self.scrollView.contentSize;
CGFloat contentHeight = contentSize.height;
// 3.保存原始偏移量,便于截图后复位
CGPoint offset = self.scrollView.contentOffset;
// 4.设置最初的偏移量为(0,0);
[self.scrollView setContentOffset:CGPointMake(0, 0)];NSMutableArray *images = [NSMutableArray array];
while (contentHeight > 0) {
// 5.获取CGContext 5.获取CGContext
UIGraphicsBeginImageContextWithOptions(boundsSize, NO, 0.0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 6.渲染要截取的区域
[self.layer renderInContext:ctx];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// 7.截取的图片保存起来
[images addObject:image];CGFloat offsetY = self.scrollView.contentOffset.y;[self.scrollView setContentOffset:CGPointMake(0, offsetY + boundsHeight)];contentHeight -= boundsHeight;
}
// 8 webView 恢复到之前的显示区域
[self.scrollView setContentOffset:offset];
CGFloat scale = [UIScreen mainScreen].scale;
CGSize imageSize = CGSizeMake(contentSize.width * scale,
contentSize.height * scale);
// 9.根据设备的分辨率重新绘制、拼接成完整清晰图片
UIGraphicsBeginImageContext(imageSize);
[images enumerateObjectsUsingBlock:^(UIImage *image, NSUInteger idx, BOOL *stop) {
[image drawInRect:CGRectMake(0,scale * boundsHeight * idx,scale * boundsWidth,scale * boundsHeight)];
}];
UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();return fullImage;
}
IOS UIview截图相关推荐
- ios uiview动画_iOS UIView动画
ios uiview动画 In this tutorial, we'll be animating our UI Views in various ways in the iOS Applicatio ...
- IOS UIView详解
文章目录 IOS UIView详解 1.官方类分析 2. UIView 常用的属性 2.1 UIView的圆角加阴影效果的实现 2.2 UIView 属性 2.2.1 UIView 几何属性 2.2. ...
- IOS UiView frame哪里来?
初学ios开发,frame center bounds 一直搞不清楚.最近在看wwdc session 121 UIKit Rendering 找到答案. frame 是计算属性 frame定义是父视 ...
- snipaste滚动截图方法_百度终于良心一回,出了一款ios长截图神器!
今天给大家带来两款好用的截图软件,一个是iOS端,一个是PC端的. 1.滚动截长图(IOS) 大家都知道iOS系统本身是没有长截图工具的,所以只能借助第三方的软件才可以实现这个功能. 滚动截长图是一款 ...
- (IOS)截图Demo
思路是建一个UIView的子类,获取划动出的矩形,用协议将矩形传递给代理对象,依据该矩形完成图像数据的截取,并显示出来. 截图视图类: #import <UIKit/UIKit.h>@pr ...
- iOS - UIView属性hidden, opaque, alpha, opacity的区别
iOS开发-之UIView属性hidden, opaque, alpha, opacity的区别 一.alpha 液晶显示器是由一个个的像素点组成的,每个像素点都可以显示一个由RGBA颜色空间组成的一 ...
- ios UIView全部API解读
/********* UIView是iOS系统界面元素的基础,所有的界面元素都是集成自它.它本身完全是由CoreAnimation来实现的.它真正的绘图部分,是一个叫CALayer(Core Anim ...
- iOS设备截图和Windows电脑互传,解决提交bug无图不能说明问题
在测试iOS应用的时候,需要用到截图功能,所谓有图有真相,可以说明一些bug问题. 然而传统的测试同学,可能就会在iOS设备上下载微信或QQ,然后电脑端也挂上微信.QQ进行互传.这样当然可以解决问题, ...
- [Swift]对UIView截图
/// 对窗口截屏 let image = UIApplication.shared.keyWindow!.screenshotImage()/// 对某一个View截图 let image = se ...
最新文章
- 【组队学习】【23期】Datawhale编程实践(区块链)
- 自定义验证控件CustomValidator
- 快速游戏开发工具GameMaker,Action Game Maker使用体验
- Apache Directory 指令
- [转]让你赚大钱成富翁的4个投资习惯
- 使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据
- python调用数据库数据创建函数_Pyhton应用程序数据库函数封装
- Django中object.all
- 和在c语言,?和:在C语言中的详解
- CentOS7服务管理(重启,停止,自动启动命令)
- Web Components 入门
- 霍金临终论文公开:揭秘沉入黑洞的信息去向
- div section article区分--20150227
- springboot学习笔记03 整合JPA
- CentOS 7.5 yum 安装 Git
- spring扩展点四:SmartInitializingSingleton 补充
- niceScroll 滚动条的用法
- 机器学习的所有资源链接和经验教训(八)深度学习框架
- 使用pandas的merge出现Empty DataFrame 和 Index: []
- 四气调神大论篇 :四季养生法
热门文章
- java中的js是什么意思_什么是JavaScript
- 心理学的166个现象---之三
- 计算机上两个网络,从逻辑功能上可把计算机网络分为( )和( )两个子网。
- 02 12 字符串反转;汉字硬反转(天连草色一川平 -> 平川一色草连天)
- TimeSpan时间间隔
- mybatis读取配置文件报错:Could not find resource configuration.xml
- 朱丹为什么是文艺青年
- 名帖369 康里巎巎 草书《李白古风诗卷》
- 第十八届全国大学生智能车竞赛华南赛区成绩与奖项
- C语言之结构体和共同体——结构体的定义和使用