一、简单说明

  在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏。如图:

  完成截屏功能的核心代码:

  - (void)renderInContext:(CGContextRef)ctx;

  调用某个view的layer的renderInContext:方法即可

二、代码示例

  storyboard界面搭建:

  代码:

 1 //
 2 //  YYViewController.m
 3 //  01-截屏
 4 //
 5 //  Created by apple on 14-6-12.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8
 9 #import "YYViewController.h"
10 #import "MBProgressHUD+NJ.h"
11
12 @interface YYViewController ()
13 @property (weak, nonatomic) IBOutlet UIView *contentView;
14 - (IBAction)BtnClick:(UIButton *)sender;
15
16 @end
17
18 @implementation YYViewController
19
20 - (void)viewDidLoad
21 {
22     [super viewDidLoad];
23 }
24
25 - (IBAction)BtnClick:(UIButton *)sender {
26
27     //延迟两秒保存
28     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
29         //获取图形上下文
30         //    UIGraphicsBeginImageContext(self.view.frame.size);
31         UIGraphicsBeginImageContext(self.contentView.frame.size);
32         //将view绘制到图形上下文中
33
34         //    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
35         [self.contentView.layer renderInContext:UIGraphicsGetCurrentContext()];
36
37
38         //将截屏保存到相册
39         UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
40
41         UIImageWriteToSavedPhotosAlbum(newImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
42     });
43 }
44
45  - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
46 {
47     if (error) {
48         [MBProgressHUD showError:@"保存失败,请检查是否拥有相关的权限"];
49     }else
50     {
51 //        [MBProgressHUD showMessage:@"保存成功!"];
52         [MBProgressHUD showSuccess:@"保存成功!"];
53     }
54 }
55
56 @end

把截取的图片保存到手机的相册中:
说明:把整个屏幕画到一张图片里
1.创建一个bitmap的上下文
2.将屏幕绘制带上下文中
3.从上下文中取出绘制好的图片
4.保存图片到相册 
补充:把图片写入到文件的代码
1      // 3.从上下文中取出绘制好的图片
2      UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
3
4      NSData *data = UIImagePNGRepresentation(newImage);
5
6      NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"abc.png"];
7      NSLog(@"%@", path);
8      [data writeToFile:path atomically:YES];

三、补充
保存成功和保存失败之后应该做些事情?
系统推荐的方法:

 1 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
 2 {
 3     if (error) {
 4         [MBProgressHUD showError:@"保存失败,请检查是否拥有相关的权限"];
 5     }else
 6     {
 7 //        [MBProgressHUD showMessage:@"保存成功!"];
 8         [MBProgressHUD showSuccess:@"保存成功!"];
 9     }
10 }

如果图片成功保存的话,那么就提示保存成功。
如果保存失败,那么提示失败
提示:保存失败常见有两个原因:1是内存不够,2是手机内部的权限不允许。
说明:如果当一个应用程序想要访问通讯录或相册,用户已经明确拒绝过,那么以后再要访问的话会直接拒绝。这个时候,可以提示用户去开启权限。

转载于:https://www.cnblogs.com/zengshuilin/p/5756527.html

OS开发UI篇—Quartz2D使用(截屏)相关推荐

  1. iOS开发UI篇—Quartz2D使用(绘图路径)

    iOS开发UI篇-Quartz2D使用(绘图路径) 一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径  cgmutablepat ...

  2. iOS开发UI篇—Quartz2D简单使用(二)

    iOS开发UI篇-Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...

  3. iOS开发UI篇—Quartz2D使用(信纸条纹)

    iOS开发UI篇-Quartz2D使用(信纸条纹) 一.前导程序 新建一个项目,在主控制器文件中实现以下几行代码,就能轻松的完成图片在视图中的平铺. 1 #import "YYViewCon ...

  4. OS开发UI篇—popoverController使用注意

    iOS开发UI篇-popoverController使用注意 一.设置尺寸 提示:不建议,像下面这样吧popover的宽度和高度写死. 1 //1.新建一个内容控制器2 YYMenuViewContr ...

  5. OS开发UI篇—核心动画(基础动画)

    文顶顶 最新博文发布地址:花田半亩(wendingding.com) iOS开发UI篇-核心动画(基础动画) iOS开发UI篇-核心动画(基础动画) 一.简单介绍 CAPropertyAnimatio ...

  6. iOS开发UI篇—Quartz2D使用(绘制基本图形)

    一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 决定绘制的输出目标(绘制到什么地方去?)(输出目标可以 ...

  7. OS开发UI篇—在UItableview中实现加载更多功能

    一.实现效果 点击加载更多按钮,出现一个加载图示,三秒钟后添加两条新的数据.                      二.实现代码和说明 当在页面(视图部分)点击加载更多按钮的时候,主页面(主控制器 ...

  8. iOS开发UI篇—Quartz2D使用(矩阵操作)

    一.关于矩阵操作 1.画一个四边形 通过设置两个端点(长和宽)来完成一个四边形的绘制. 代码: 1 - (void)drawRect:(CGRect)rect 2 { 3 //画四边形 4 //获取图 ...

  9. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

最新文章

  1. 电子商务创造的第二次产业机会
  2. MIT新开发的 AI 模型有望改进恶性脑瘤治疗
  3. 关于onclick操作,影响按钮submit提交
  4. linux权限切换命令,Linux基础常用命令汇总(权限操作)
  5. 教你如何用Harbor 私有镜像仓库搭建
  6. ssh(Spring+Spring mvc+hibernate)——EmpDaoImpl.java
  7. 深度优先搜索(解题剑指Offer12、13)
  8. IBM T60网卡问题
  9. 10g的客户端从9i的服务器中导出数据时遇到上面的问题
  10. 详解 :Spring Boot 最核心的 3 个注解
  11. NoSQL数据库探讨- 为什么要用非关系数据库?
  12. 数学建模教程:CBA-基于关联规则的分类算法
  13. 银行管理系统实例(C语言版)
  14. 软件项目管理随谈(2)——项目合同问题
  15. 共享打印机服务器脱机状态,共享打印机脱机无法打印
  16. Spring Boot (Vue3+ElementPlus+Axios+MyBatisPlus +Spring Boot 前后端分离)
  17. 图片去水印在线-图片去水印无痕迹的app
  18. MATLAB experiment<3>
  19. 使用Python实现QQ窗口抖动
  20. java的int转long

热门文章

  1. python语言的三种数字类型_Python语言中的类型之数字类型--Python(10)
  2. pandas 替换 某列大于_Pandas使用总结
  3. python重命名csv文件_Python根据文件中选定的字符复制和重命名许多小csv文件
  4. android studio怎么设置log保存txt_【Stata写论文】log命令的使用和分析结果导出
  5. 翻牌抽奖 php,PHP+jQuery开发简单的翻牌抽奖实例
  6. cnn 预测过程代码_代码实践 | CNN卷积神经网络之文本分类
  7. u盘无媒体容量0无卷还能修吗_都2020年了,买新U盘没Type-C接口就过时了
  8. 载波聚合或双连接的方式进行_首发天玑1000+!iQOO Z1来了:5G+5G双卡双待、双WiFi 6...
  9. echart 高度 不用 不撑满_你担心的高度近视老了之后是这样的
  10. mysql结果行数_取得数据库结果集中的行数