- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
//监听截屏
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(userDidTakeScreenshot:)
name:UIApplicationUserDidTakeScreenshotNotification
object:nil];
return YES;
}
- (void)userDidTakeScreenshot:(NSNotification *)notification {
NSLog(@"检测到截屏");
[self windowsScreenShot];
}
+ (UIImage *)windowsScreenShot{
UIImage * image[2];
for (int i = 0; i < 2; i++) {
if (i == 0) {
// 获得状态栏view的上下文以绘制图片
UIView *statusBarView = nil;
if (@available(iOS 13.0, *)) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
UIStatusBarManager *statusBarManager = [UIApplication sharedApplication].keyWindow.windowScene.statusBarManager;
if ([statusBarManager respondsToSelector:@selector(createLocalStatusBar)]) {
UIView *_localStatusBar = [statusBarManager performSelector:@selector(createLocalStatusBar)];
if ([_localStatusBar respondsToSelector:@selector(statusBar)]) {
statusBarView = [_localStatusBar performSelector:@selector(statusBar)];
}
}
} else {
statusBarView = [[UIApplication sharedApplication] valueForKey:@"_statusBar"];
// Fallback on earlier versions
}
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;
}
iOS监听截屏,获取截屏图片
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 关于iOS用户截屏操作,此文以swift为例,库使用iOS8之后的Photos库iOS7开始提供了UIApplic...
- 其实,实现这个效果很简单记得两个重点环节:1.截屏时系统会返回给我们一个通知;2.drawViewHierarch...
- 该Demo实现如下功能 从相册_照片 获取图片, 并贴在Image上 从相册_时刻 获取照片, 并贴在Image上...