【问题标题】:How to disable the screenshot in native iOS using objective c/Swift?如何使用目标 c/Swift 在本机 iOS 中禁用屏幕截图?
【发布时间】:2021-06-01 21:20:50
【问题描述】:

您好 SO 用户,因为我开始了我的 swift 职业生涯并且我当前的项目是目标 c,我需要将我的 swift 代码转换为目标 c。

我要求在 iOS 设备中禁用截屏。由于 Apple 不对此提供支持,我尝试的另一个解决方法是 - 在使用 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 中禁用屏幕截图?

【问题讨论】:

    标签: ios objective-c swift iphone


    【解决方案1】:

    一) 首先,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”);  
            }
        }];
        }];
    

    关注link1link2,是的,在任何情况下都可以回复我的评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-10
      • 2014-10-16
      • 2017-03-01
      • 2022-06-10
      • 1970-01-01
      • 2021-02-23
      • 2022-12-23
      • 1970-01-01
      相关资源
      最近更新 更多