如何不从照片库 iOS 中获取屏幕截图

Posted

技术标签:

【中文标题】如何不从照片库 iOS 中获取屏幕截图【英文标题】:How to Not fetch screenshots from Photos library iOS 【发布时间】:2020-03-02 05:49:31 【问题描述】:

我正在尝试从照片库中获取照片,并且我只想显示照片库中的图像。我不想显示视频。

我正在使用PHFetchOptions 从照片库中获取PHAssets。我还提供了一个仅获取照片的谓词。以下是我的代码:

let allPhotosOptions = PHFetchOptions()
allPhotosOptions.predicate = NSPredicate(format: "mediaType == 1")
allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
fetchResult = PHAsset.fetchAssets(with: allPhotosOptions)

不过,我也收到了屏幕截图。我不想获取屏幕截图。我发现也有一个属性。它被称为PHAssetMediaSubtype.photoScreenshot

我更新了谓词不获取屏幕截图,但它似乎不起作用。我的许多其他图像也被过滤了,它们不是屏幕截图。下面是我更新的谓词代码

 allPhotosOptions.predicate = NSPredicate(format: "mediaType == 1 AND mediaSubtypes != %d", PHAssetMediaSubtype.photoScreenshot.rawValue)

【问题讨论】:

我不确定是否有办法使用谓词过滤屏幕截图。我一直在做的是首先获取PHAssets,然后检查是否phAsset.mediaSubtypes.contains(.photoScreenshot) 【参考方案1】:

你试过吗?似乎在 NSPredicate 上说 NOT 是很不重要的

allPhotosOptions.predicate = NSPredicate(format: "(mediaType == 1) AND ((mediaSubtype & %d) != 0)", PHAssetMediaSubtype.photoScreenshot.rawValue)

从this Apple 开发者论坛帖子中获得了这个 sn-p

【讨论】:

【参考方案2】:

试试这个,应该适合你的情况:

allPhotosOptions.predicate = NSPredicate(format: "mediaType == \(PHAssetMediaType.image.rawValue) AND !((mediaSubtype & \(PHAssetMediaSubtype.photoScreenshot.rawValue)) == \(PHAssetMediaSubtype.photoScreenshot.rawValue))")

【讨论】:

以上是关于如何不从照片库 iOS 中获取屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

无法从存储在照片库中的屏幕截图 png 文件中获取创建日期

如何在 iOS 共享扩展中获取屏幕截图?

如何获取 tkinter 窗口的屏幕截图

IOS iMessage扩展截图检测

始终将屏幕截图保存在“照片”中相同的自定义名称应用相册中

没有在移动 ios 魅力报告中获取屏幕截图