Hello SO用户,因为我开始了我在swift的职业生涯,我目前的项目是在objective c中,我需要将我的swift代码转换成objective c。
我已经要求在iOS设备中禁用截图。由于苹果没有给予支持,我正在尝试的另一个解决方案是-使用UIApplicationUserDidTakeScreenshotNotification在截图时获得通知,并从照片库中获取最后一张照片并删除它,如下面的代码在swift中。
func deleteAppScreenShot() {
NSLog("i am here")
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors?[0] = Foundation.NSSortDescriptor(key: "creationDate", ascending: true)
let fetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fetchOptions)
guard let lastAsset = fetchResult.lastObject else { return }
PHPhotoLibrary.shared().performChanges {
PHAssetChangeRequest.deleteAssets([lastAsset] as NSFastEnumeration)
} completionHandler: { (success, errorMessage) in
if !success, let errorMessage = errorMessage {
print(errorMessage.localizedDescription)
}
}
}
然而,上面的方法并不是理想的解决方案,因为它总是要求用户允许删除最后一张照片
谁能告诉我如何在iOS中禁用屏幕截图?
A)首先,iOS不允许你禁用截图,所以你必须清楚地传达给客户端或任何商务人士,这是不可行的事情,因为它与操作系统有关。
B)下一件事提供给你的解决方案不是一个合适的解决方案,因为它只是检测何时截图,之后用户必须手动删除他的许可的截图。它不能自动完成(未经用户许可),因为APPLE PHOTOS API不允许你这样做,因为严格的用户隐私政策。所以这个解决方案是最后的实现,如果任何情况下客户是坚定的或无论如何想要实现它,但根据我的经验,这不是一个100%的解决方案,一定不能实现
我能理解从Swift转换回Objective c的麻烦。因为我有相同的经验,我可以分享Objective C代码的快照,你可以组装在一起,以达到预期的结果。代码是:
获取最后一个对象:
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
PHAsset *lastAsset = [fetchResult lastObject];
删除可能:
PHFetchResult *asset = [PHAsset fetchAssetsWithALAssetURLs:@“Your asset url” options:nil];
[asset enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@",[obj class]);
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
BOOL req = [obj canPerformEditOperation:PHAssetEditOperationDelete];
if (req) {
NSLog(@"true");
[PHAssetChangeRequest deleteAssets:@[obj]];
}
} completionHandler:^(BOOL success, NSError *error) {
NSLog(@"Finished Delete asset. %@", (success ? @"Success." : error));
if (success) {
NSLog(@“delete successfully”);
}
}];
}];
关注link1 link2,是的,在任何情况下都给我写评论。