ios android 截屏 分享,iOS 应用内截屏分享

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

封装工具类

实现功能:

获取到截屏的图片

展示截屏图片和相关操作

定时器,规定时间后取消展示

tool.h

#import

@interface LPScreenShotTool : NSObject

+ (instancetype) sharedScreenShot;

- (void)embedApplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

@end

tool.m

#import "LPScreenShotTool.h"

@interface LPScreenShotTool()

@property (nonatomic, strong) UIView *shotView;

@property (nonatomic, weak) NSTimer *timer;//定时器

@property (nonatomic, assign) NSInteger timerNum;//定时器时间,用于循环

@end

@implementation LPScreenShotTool

static id _instace;

+ (instancetype) sharedScreenShot{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

_instace = [[LPScreenShotTool alloc]init];

});

return _instace;

}

+ (id)allocWithZone:(struct _NSZone *)zone {

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

_instace = [super allocWithZone:zone];

});

return _instace;

}

- (id)copyWithZone:(NSZone *)zone {

return _instace;

}

- (void)embedApplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// 注册截屏通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot:) name:UIApplicationUserDidTakeScreenshotNotification object:nil];

}

// 执行截屏相应事件

//画 UI,处理功能,自定义代码

- (void)userDidTakeScreenshot:(NSNotification *)notification {

UIImage *image = [self imageWithScreenshot];

UIWindow *window = [[UIApplication sharedApplication].windows objectAtIndex:0];

_shotView = [[UIView alloc] initWithFrame:CGRectMake(0, ScreenHeight-200, ScreenWidth, 200)];

_shotView.backgroundColor = [BlueBGColor colorWithAlphaComponent:0.85];

//添加显示

UIImageView *imgPhoto = [[UIImageView alloc]initWithImage:image];

imgPhoto.frame = CGRectMake(30, 15, 100, _shotView.height-30);

//添加边框

imgPhoto.layer.borderColor = [[UIColor whiteColor] CGColor];

imgPhoto.layer.borderWidth = 1.0f;

// //添加四个边阴影

// imgvPhoto.layer.shadowColor = [UIColor blackColor].CGColor;

// imgvPhoto.layer.shadowOffset = CGSizeMake(0, 0);

// imgvPhoto.layer.shadowOpacity = 0.5;

// imgvPhoto.layer.shadowRadius = 10.0;

// //添加两个边阴影

// imgvPhoto.layer.shadowColor = [UIColor blackColor].CGColor;

// imgvPhoto.layer.shadowOffset = CGSizeMake(4, 4);

// imgvPhoto.layer.shadowOpacity = 0.5;

// imgvPhoto.layer.shadowRadius = 2.0;

[_shotView addSubview:imgPhoto];

[window addSubview:_shotView];

_timerNum = 4;

_timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerStepStart) userInfo:nil repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];

}

- (void)timerStepStart{

if (_timerNum == 0) {

if ([self.timer isValid]) {

[self.timer invalidate];

self.timer = nil;

[_shotView removeFromSuperview];

}

return;

}

_timerNum = _timerNum - 1;

}

- (UIImage *)imageWithScreenshot {

NSData *imageData = [self dataWithScreenshotInPNGFormat];

return [UIImage imageWithData:imageData];

}

// 获取到截屏图片

- (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);

}

- (void)dealloc {

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIApplicationUserDidTakeScreenshotNotification" object:nil];

[self.timer invalidate];

self.timer = nil;

[_shotView removeFromSuperview];

}

@end

如何引用

AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[[LPScreenShotTool sharedScreenShot] embedApplication:application didFinishLaunchingWithOptions:launchOptions];

return YES;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值