最近有個(gè)需要掠河,需要截取用戶(hù)當(dāng)前的頁(yè)面栈虚,但是一般常見(jiàn)的方法只能截取靜態(tài)頁(yè)面巾表,動(dòng)態(tài)頁(yè)面會(huì)導(dǎo)致黑屏(如視頻),如果先監(jiān)聽(tīng)用戶(hù)的截屏略吨,再拿到截屏圖片就能避免這個(gè)問(wèn)題集币,正確姿勢(shì)如下:
1,添加截屏通知監(jiān)聽(tīng)
//引用框架
#import <Photos/Photos.h>
//注冊(cè)通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(userDidTakeScreenshot:)
name:UIApplicationUserDidTakeScreenshotNotification object:nil];
2翠忠,截屏響應(yīng)
//截屏響應(yīng)
- (void)userDidTakeScreenshot:(NSNotification *)notification
{
NSLog(@"檢測(cè)到截屏");
//由于截屏之后圖片不會(huì)立即存儲(chǔ)到相冊(cè)鞠苟,所以需要延遲一些時(shí)間再做處理
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
PHAsset * asset = [self latestAsset];
PHImageManager * imageManager = [PHImageManager defaultManager];
[imageManager requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
UIImage * image = [UIImage imageWithData:imageData];
[self addVideoTaskWithImage:image];
self.isJiePing = NO;
}];
});
}
精華:監(jiān)聽(tīng)用戶(hù)截屏后,獲取相冊(cè)最新圖片
ps:調(diào)用之前需要用戶(hù)同意完全訪問(wèn)相冊(cè)權(quán)限
//獲取最新圖片
- (PHAsset *)latestAsset {
// 獲取所有資源的集合秽之,并按資源的創(chuàng)建時(shí)間排序
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
PHFetchResult *assetsFetchResults = [PHAsset fetchAssetsWithOptions:options];
return [assetsFetchResults firstObject];
}
//判斷相冊(cè)權(quán)限
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusAuthorized ) {
}