监听用户截屏
监听用户截屏
@(iOS)
-
iOS8之前可以用
ALAssetsLibrary
-
iOS8 以后可以用
PHAsset
-
监听通知 UIApplicationUserDidTakeScreenshotNotification
- iOS8之前可以用 ALAssetsLibrary
#pragma mark - 获取最新截图
/*
#import <AssetsLibrary/AssetsLibrary.h>
*/
- (void)latestAsset:(void (^)(UIImage * _Nullable, NSError *_Nullable))block {
if (SystemVersion < 8.0) {
[self enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsWithOptions:NSEnumerationReverse/*遍历方式,逆序*/ usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
ALAssetRepresentation *repr = [result defaultRepresentation];
UIImage *img = [UIImage imageWithCGImage:[repr fullResolutionImage]];
*stop = YES;
if (block) {
block(img,nil);
}
*stop = YES;
}
}];
*stop = YES;
}
} failureBlock:^(NSError *error) {
if (error) {
if (block) {
block(nil,error);
}
}
}];
}
}
iOS8 以后可以用 PHAsset
/*
#import <Photos/PHAsset.h>
#import <Photos/PHImageManager.h>
#import <Photos/PHFetchOptions.h>
*/
/// 获取最新截图
- (void)latestPhoto:(void (^_Nullable)(UIImage * _Nullable))block {
if (SystemVersion >= 8.0) {
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
PHImageRequestOptions * requestOptions = [[PHImageRequestOptions alloc] init];
requestOptions.synchronous = YES;
PHFetchResult<PHAsset*> * fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
if (fetchResult.count > 0) {
PHAsset *asset = [fetchResult objectAtIndex:0];
PHImageManager * manager = [PHImageManager defaultManager];
CGSize targetSize = CGSizeMake(asset.pixelWidth, asset.pixelHeight);
[manager requestImageForAsset:asset
targetSize:targetSize
contentMode:PHImageContentModeAspectFit
options:requestOptions
resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
if (result) {
if(block) {
block(result);
}
}
}];
}
}
}
本文来自博客园,作者:struggle_time,转载请注明原文链接:https://www.cnblogs.com/songliquan/p/6902567.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?