使用PHFetchOptions仅获取横向PHAsset

时间:2018-07-07 22:47:10

标签: ios swift photosframework

我能够使用以下功能成功检索视频:

func getVideoAssets() {
    let options = PHFetchOptions()
    options.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: false) ]
    options.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.video.rawValue)

    videos = PHAsset.fetchAssets(with: options)
    print(videos)
    prepareCollectionView()
}

但是,我只想获取LANDSCAPE视频,因为我的应用仅支持横向视频。 我尝试了以下方法:

options.predicate = NSPredicate(format: "(mediaType = %d) AND (pixelWidth > pixelHeight)", PHAssetMediaType.video.rawValue)

但是我遇到了以下崩溃:

  

“ NSInvalidArgumentException”,原因:“获取选项中不支持的谓词:pixelWidth> pixelHeight”

似乎我无法使用该方法进行过滤。还有另一种方法可以做到这一点吗?似乎NSPredicate仅接受参数,而不在PHAsset中的2个值之间进行比较。

如何使用PHFetchOptions仅检索风景视频?

1 个答案:

答案 0 :(得分:0)

我最终找到了一个不使用NSPredicate的解决方案,而只是在检索到资产数组之后对其进行过滤。 它对我来说很好用,我希望使用NSPredicate,但我很满意。

希望这对其他人有帮助

// get landscape only content
let unfilteredVideosArray = PHAsset.fetchAssets(with: options)
var filteredVideosArray : [PHAsset] = []
for i in 0..<unfilteredVideosArray.count {
    let video = unfilteredVideosArray.object(at: i)
    if video.pixelWidth > video.pixelHeight {
        filteredVideosArray.append(video)
    }
}

self.videos = filteredVideosArray