将 PHAsset 获取结果限制为仅 3 个资产

Posted

技术标签:

【中文标题】将 PHAsset 获取结果限制为仅 3 个资产【英文标题】:Limit PHAsset fetch result to only 3 assets 【发布时间】:2015-05-02 23:30:47 【问题描述】:

我需要获取按拍摄日期排序的三张照片 - 最近的是最近拍摄的。我目前这样做的方式是获取所有照片资产,然后在适当的索引(0、1、2)处获取资产。虽然这可行,但我很好奇当我只对前三名感兴趣时是否有更有效的方法来做到这一点。文档解释 fetch 不会返回所有图像数据 - 仅返回元数据,但我仍然不需要获取所有元数据。有没有PHFetchOption 可以用来限制获取,或者NSPredicate,或者不需要担心?

var assetsFetchResults = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
let imageManager = PHCachingImageManager()

if assetsFetchResults?.count > 0 
    var asset = assetsFetchResults?[0] as? PHAsset
    imageManager.requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: nil, resultHandler: ...)

//repeat for index 1 and 2 

【问题讨论】:

你可以使用fetchKeyAssetsInAssetCollection:options:来获取几张KEY照片,而不是fetchAssetsInAssetCollection:options:options: 这在应用特定用户库的情况下不起作用。 @jarora 它在 ios 8.4.1 的第三方应用创建的相册中对我有用 【参考方案1】:

因此,在 iOS 9 中,您可以设置 PHFetchOptions 设置来限制您获取的数量。例如:

   let fetchOptions = PHFetchOptions()
    if #available(iOS 9.0, *) 
        fetchOptions.fetchLimit = 3
     else 
        // Fallback on earlier versions
    

但我也在寻找一种在 iOS 8 设备上执行此操作的方法,因为此时我们仍然需要同时支持 iOS 8 和 9

【讨论】:

以上是关于将 PHAsset 获取结果限制为仅 3 个资产的主要内容,如果未能解决你的问题,请参考以下文章

按日期对 PHAsset 获取结果进行分组的智能方法

如何将结果集限制为仅 JOIN 中的最新实例

通过裁剪修改/编辑PhAsset图像

在不加载 PHAsset us 照片库的情况下获取所有图像本地标识符/文件路径

访问 PHAsset 对象的 URL 信息的同步方法

按顺序获取 PHAsset