ios - 使用 PHFetchOptions 获取 Landscape Only PHAssets

标签 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()
}

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

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

但我遇到了以下崩溃:

'NSInvalidArgumentException', reason: 'Unsupported predicate in fetch options: pixelWidth > pixelHeight'

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

我怎样才能使用 PHFetchOptions 只检索横向视频?

最佳答案

我最终选择了一个不使用 NSPredicate 的解决方案,它只是在检索 Assets 数组后对其进行过滤。 它对我来说工作得很好,我希望使用 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

关于ios - 使用 PHFetchOptions 获取 Landscape Only PHAssets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51227473/

相关文章:

ios - Sqlite.swift 不适用于 Xcode 7.3

iphone - for循环中的UIButton翻转动画

Swift 委托(delegate)显示 nil

Swift:像 kotlin 等价物一样用接收器关闭?

ios - 检查给定的 PHAsset 是 iCloud Assets 吗?

ios - Swift tableView 分页

ios - 核心数据计算和数据分组

javascript - 如何从非用户更新 PFUser 属性?

ios - 如何获取 PHAsset 的原始(EXIF?)创建日期/时间?

ios - 如何向从照片框架获取的 PHAsset 添加分页?