美文网首页收藏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开发——监听系统截屏并获得截图

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