- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
//監(jiān)聽截屏
[[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) {
// 獲得狀態(tài)欄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監(jiān)聽截屏,獲取截屏圖片
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 關(guān)于iOS用戶截屏操作,此文以swift為例,庫使用iOS8之后的Photos庫iOS7開始提供了UIApplic...
- 現(xiàn)在很多iOS應(yīng)用涉及到活動什么的分享什么的用到把當前截屏圖片放置頁面的對應(yīng)位置,所以今天九聊一聊如何將截屏...
- 其實,實現(xiàn)這個效果很簡單記得兩個重點環(huán)節(jié):1.截屏?xí)r系統(tǒng)會返回給我們一個通知;2.drawViewHierarch...
- 該Demo實現(xiàn)如下功能 從相冊_照片 獲取圖片, 并貼在Image上 從相冊_時刻 獲取照片, 并貼在Image上...