iOS截图的几个场景以及解决方案
来源:互联网 发布:移动工作站推荐 知乎 编辑:程序博客网 时间:2024/06/05 11:45
这篇博客提供了不同场景截图以及图片合成的API封装:
一、截取整个屏幕或者根据 frame 截取屏幕内某个固定区域
这个适用于固定布局的视图,所截取的范围在不同的屏幕尺寸上有同样的大小。为了布局的美观,其实不太推荐这种布局方式。
+ (UIImage *)transViewToImage:(UIView *)targetView targetRect:(CGRect)targetRect{ CGRect wholeRect = targetView.frame; UIGraphicsBeginImageContext(wholeRect.size); CGContextRef context = UIGraphicsGetCurrentContext(); [targetView.layer renderInContext:context]; UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImage * targetImage = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([img CGImage], targetRect)]; return targetImage;}
二、截取整个 UITableView 或者 UIScrollView 的内容(包括屏幕外的部分)
这种是比较常见的一个场景,如果内容超过屏幕,依然可以完整截取。
+ (UIImage *)snapImageWithTheWholeScrollView:(UIScrollView *)tableView{ UIImage* image = nil; CGSize contentSize; if(tableView.contentSize.height <= 1300){ contentSize = CGSizeMake(tableView.contentSize.width, tableView.contentSize.height+10); }else{ contentSize = CGSizeMake(tableView.contentSize.width, 1300); } CGRect bounds = CGRectMake(0, 0, tableView.contentSize.width, contentSize.height); UIGraphicsBeginImageContextWithOptions(contentSize, NO, 0.0); { CGPoint savedContentOffset = tableView.contentOffset; CGRect savedFrame = tableView.frame; tableView.contentOffset = CGPointZero; tableView.frame = bounds; [tableView drawViewHierarchyInRect:tableView.frame afterScreenUpdates:YES]; image = UIGraphicsGetImageFromCurrentImageContext(); tableView.contentOffset = CGPointMake(savedContentOffset.x, savedContentOffset.y); tableView.frame = savedFrame; } UIGraphicsEndImageContext(); return image;}
三、截图某个 UIView 的内容
该方法能直接把一个 UIView 转化为 UIImage ,也是常见的一种场景。
+ (UIImage *)transViewToImage:(UIView *)targetView{ UIGraphicsBeginImageContextWithOptions(CGSizeMake(targetView.width, targetView.height), NO, [UIScreen mainScreen].scale); [targetView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *targetImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return targetImage;}
四、多图合成一个图片
把多张图片合成一个图片,这里是从上往下排列,如果需要从左往右或者其他方式,调整 frame 的排列即可。
+ (UIImage *)synthesizeImageWithImages:(NSArray *)images{ if (images.count == 0) { return nil; } CGFloat totalHeight = 0.0; CGFloat width = 0.0; for (UIImage *image in images) { totalHeight+=image.size.height; if (width == 0) { width = image.size.width; } } UIGraphicsBeginImageContextWithOptions(CGSizeMake(width,totalHeight),NO,0.0); CGFloat _y = 0.0; for (int i = 0; i < images.count; i++) { UIImage *tempImage = images[i]; [tempImage drawInRect:CGRectMake(0, _y, width, tempImage.size.height)]; _y+=tempImage.size.height; } UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return resultImage;}
通过上面的几个方法,差不多就能应付在开发过程中所有的截图处理了。
阅读全文
0 0
- iOS截图的几个场景以及解决方案
- 几个典型场景的系统设计解决方案
- Caffe 模型微调 的场景、问题、技巧以及解决方案
- Caffe 模型微调 的场景、问题、技巧以及解决方案
- iOS对于copy的原理以及常见的使用场景
- iOS工作遇到的困难以及解决方案
- ios的截图功能
- iOS 截图的实现
- 发两张室外场景纹理混合的截图
- iOS 通知的使用,以及场景(未确定版本)
- 锚点滑动jq 关于HTML锚点定位几个不同场景的解决方案
- 分布式计算需求场景以及解决方案
- Zookeeper的几个应用场景
- Android内存优化-内存泄漏的几个场景以及解决方式
- DL开源框架Caffe | 模型微调 (finetune)的场景、问题、技巧以及解决方案
- iOS实现截图的代码
- IOS页面截图的方法
- iOS -OPenGL的屏幕截图
- MVP
- 创建 sequence 参数 order与noorder的区别
- 手机状态栏和actionbar颜色一致
- 剑指编程(6)
- 【Angular】源于angular传参
- iOS截图的几个场景以及解决方案
- UVA 232 字符串处理
- list的remove方法
- Shell命令大全
- 新的排序算法——ShimaKaZe Sort
- html的angular从json拿到表格
- JADE学习笔记1:JADE简介与配置
- 简单的java程序
- java算数运算符之加法