UIApplicationUserDidTakeScreenshotNotification检查截屏并获取截屏后的图片

- (void)registerTakeScreenShotNotice

{

    __weak typeof(self) weakSelf = self;

    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];

    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification

                                                      object:nil

                                                       queue:mainQueue

                                                  usingBlock:^(NSNotification *note) {

                                                      // executes after screenshot

                                                      NSLog(@"截屏咯");

                                                      [weakSelf userDidTakeScreenshot];

                                                  }];

}


//截屏响应

- (void)userDidTakeScreenshot

{

    NSLog(@"检测到截屏");

    

    //人为截屏, 模拟用户截屏行为, 获取所截图片

    UIImage *image_ = [self imageWithScreenshot];

}


/**

 *  返回截取到的图片

 *

 *  @return UIImage *

 */

+ (UIImage *)imageWithScreenshot

{

    NSData *imageData = [self dataWithScreenshotInPNGFormat];

    return [UIImage imageWithData:imageData];

}


/**

 *  截取当前屏幕

 *

 *  @return NSData *

 */

- (NSData *)dataWithScreenshotInPNGFormat

{

    CGSize imageSize = CGSizeZero;

    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

    if (UIInterfaceOrientationIsPortrait(orientation))

        imageSize = [UIScreen mainScreen].bounds.size;

    else

        imageSize = CGSizeMake([UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width);

    

    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);

    CGContextRef context = UIGraphicsGetCurrentContext();

    for (UIWindow *window in [[UIApplication sharedApplication] windows])

    {

        CGContextSaveGState(context);

        CGContextTranslateCTM(context, window.center.x, window.center.y);

        CGContextConcatCTM(context, window.transform);

        CGContextTranslateCTM(context, -window.bounds.size.width * window.layer.anchorPoint.x, -window.bounds.size.height * window.layer.anchorPoint.y);

        if (orientation == UIInterfaceOrientationLandscapeLeft)

        {

            CGContextRotateCTM(context, M_PI_2);

            CGContextTranslateCTM(context, 0, -imageSize.width);

        }

        else if (orientation == UIInterfaceOrientationLandscapeRight)

        {

            CGContextRotateCTM(context, -M_PI_2);

            CGContextTranslateCTM(context, -imageSize.height, 0);

        } else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {

            CGContextRotateCTM(context, M_PI);

            CGContextTranslateCTM(context, -imageSize.width, -imageSize.height);

        }

        if ([window respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)])

        {

            [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];

        }

        else

        {

            [window.layer renderInContext:context];

        }

        CGContextRestoreGState(context);

    }

    

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    

    return UIImagePNGRepresentation(image);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值