iOS开发——监听系统截屏并获得截图
项目需要得到获得截屏然后生成自己的分享图,某度能找到的基本都是怎么获取View的视图,但是几乎没有提到包含状态栏(貌似只看到一个),而包含键盘的就真的没有了。经过一翻查找,在stackoverflow上找到了截图包含键盘的方法。以下是实现代码:
/*这里示范的是UIViewController,当然也可以是自定义的UIView之类的*/
- (void)viewDidLoad {
[super viewDidLoad];
...
// iOS7之后 注册系统截屏通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(getScreenshot:)
name:UIApplicationUserDidTakeScreenshotNotification
object:nil];
}
- (void)getScreenshot:(NSNotification *)notification {
//获取截屏图片,-screenShot为自定义的方法,实现在下面
UIImage *image = [self screenShot];
// 对得到的截图进行操作,比如增加边框之类的
...
}
- (UIImage *)screenShot
{
UIImage * image[2];
for (int i = 0; i < 2; i++) {
if (i == 0) {
// 获得状态栏view的上下文以绘制图片
UIView *statusBarView = [[UIApplication sharedApplication] valueForKey:@"_statusBar"];
UIGraphicsBeginImageContext(statusBarView.frame.size);
[statusBarView.layer renderInContext:UIGraphicsGetCurrentContext()];
image[i] = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
} else {
// 获得其他所有window,包括键盘,的上下文并绘制图片
CGSize roomViewSize = [UIScreen mainScreen].bounds.size;
UIGraphicsBeginImageContextWithOptions(roomViewSize, NO, 0);
for (UIWindow *window in [UIApplication sharedApplication].windows) {
if (![window respondsToSelector:@selector(screen)] || window.screen == [UIScreen mainScreen]) {
[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];
}
}
image[i] = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
}
// 将上面得到的两张图片合并绘制为一张图片,最终得到screenshotImage
UIGraphicsBeginImageContext(image[1].size);
[image[1] drawInRect:CGRectMake(0, 0, image[1].size.width, image[1].size.height)];
[image[0] drawInRect:CGRectMake(0, 0, image[0].size.width, image[0].size.height)];
UIImage *screenshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return screenshotImage;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
由于我自己还在边自学,目前对iOS的图像绘制还不是很了解,所以这些通过上下文绘制图像的方法还是很让我迷惑的,就当做是给自己挖个坑,慢慢接触吧。
---------------------
作者:baostorm
来源:CSDN
原文:https://blog.csdn.net/baostorm/article/details/81202303
版权声明:本文为博主原创文章,转载请附上博文链接!