美文网首页收藏ios
iOS开发——监听系统截屏并获得截图

iOS开发——监听系统截屏并获得截图

作者: CaptainMi | 来源:发表于2018-12-20 10:26 被阅读28次

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

版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章

  • iOS开发——监听系统截屏并获得截图

    iOS开发——监听系统截屏并获得截图 项目需要得到获得截屏然后生成自己的分享图,某度能找到的基本都是怎么获取Vie...

  • iOS 屏幕录制监听并获取截取的图片

    1.屏幕截取监听,iOS会监听系统截屏操作,加上通知即可 2.在userDidTakeScreenshot进行操作...

  • Android surfaceView,TextureView、

    TextureView截屏 surfaceView截屏 root 截图

  • iOS 应用内截屏分享

    需求:捕获用户截屏操作,并建议用户截屏后的操作。虽然iOS11 有系统的截屏,但 APP 内截屏可便捷操作。 封装...

  • iOS开发-检测用户截屏, 并获取所截图片

    微信可以检测到用户截屏行为(Home + Power),并在稍后点击附加功能按钮时询问用户是否要发送刚才截屏的图片...

  • iOS 截屏&长截屏

    截屏在 iOS 开发中经常用到,本篇文章讲的是监听用户截屏操作,并且获取截屏图片,如果当前是UIScrollVie...

  • iOS开发-截屏

    项目需要做个截屏并保存到相册的功能,于是去网上搜了下,大部分是采用的以下方式: 不过要做的项目需要截屏的是播放视频...

  • Android上如何实现矩形区域截屏

    转载注明出处:简书-十个雨点 对屏幕进行截屏并裁剪有两种方式:早截图和晚截图。早截图,就是先截取全屏,再让用户对截...

  • 针对WKWebView进行内容的截屏。

    最近项目中需要截屏分享的功能,之前也了解过iOS截屏的技术,并写了关于截屏的笔记,兴冲冲的拿着代码稍作修改,对WK...

  • flutter:截屏

    1.flutter-截屏组件 2.flutter-截屏插件 3.flutter-iOS原生截屏 iOS代码 4.获...

网友评论

    本文标题:iOS开发——监听系统截屏并获得截图

    本文链接:https://www.haomeiwen.com/subject/xogekqtx.html