美文网首页OC-开发案例收集iOS技术专题
iOS获取APP内屏幕截图然后分享

iOS获取APP内屏幕截图然后分享

作者: 最强的小强 | 来源:发表于2022-02-11 10:46 被阅读0次
    产品需求:在APP内部,当监听到用户有截屏行为的时候,提示用户进行分享APP页面,达到引流的效果;

    废话不多说,直接上效果图:


    share.jpg
    具体做法:
    • 1.首先在 AppDelegate.m文件的方法didFinishLaunchingWithOptions里面设置监听截屏行为
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
           [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot:) name:UIApplicationUserDidTakeScreenshotNotification object:nil];
    }
    
    • 2.然后做监听的处理,绘制获取当前屏幕的上下文,输入图片
    - (void)userDidTakeScreenshot:(NSNotification *)notification {
        UIImage *image = [self imageWithScreenshot];
        if(image) {
    // WEGlobalShareView这个是绘制显示的效果图,页面不复杂,小编就没有放到这里来
            [WEGlobalShareView showWithDelegate:self andDetailImage:image];
        }
    }
    // 截取当前屏幕 ,返回截取到的图片
    - (UIImage *)imageWithScreenshot {
        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();
        NSData *imageData = UIImagePNGRepresentation(image);
        return [UIImage imageWithData:imageData];
    }
    
    • 3.最后拿到图片以后,进行分享页面即可;

    相关文章

      网友评论

        本文标题:iOS获取APP内屏幕截图然后分享

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