Swift iOS: -How to exclude .livePhotos from inclusion in the PHFetchOptions?

淺唱寂寞╮ 提交于 2019-12-13 05:49:40

问题


Following @matt's code when using the UIImagePicker, I can prevent the user from picking a .livePhoto once an image is choosen using:

let asset = info[UIImagePickerControllerPHAsset] as? PHAsset

if asset?.playbackStyle == .livePhoto { 
   // alert user this photo isn't a possibility 
}

When using the PHFetchOptions how can I prevent them from being shown instead of filtering them out inside the enumerateObjects callback?

fileprivate func fetchPhotos() {

    let fetchOptions = PHFetchOptions()
    fetchOptions.fetchLimit = 1000
    let sortDescriptor = NSSortDescriptor(key: "creationDate", ascending: false)
    fetchOptions.sortDescriptors = [sortDescriptor]

    let allPhotos = PHAsset.fetchAssets(with: .video, options: fetchOptions)

    allPhotos.enumerateObjects {
        [weak self] (asset, count, stop) in

        if asset.playbackStyle == .livePhoto {
            return
        }

        let imageManager = PHImageManager.default()
        let targetSize = CGSize(width: 350, height: 350)
        let options = PHImageRequestOptions()
        options.isSynchronous = true

        imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: options, resultHandler: {
            [weak self] (image, info) in

            if let image = image {
                self?.tableData.append(image)
            }

            if count == allPhotos.count - 1 {
                self?.collectionView.reloadData()
            }
        })
    }
}

回答1:


You can use the predicate property of PHFetchOptions. Setup the predicate to fail if the mediaSubtype attribute of the asset indicates it is a live photo.

fetchOptions.predicate = NSPredicate(format: "(mediaSubtype & %ld) == 0", PHAssetMediaSubtype.PhotoLive.rawValue)


来源:https://stackoverflow.com/questions/52286312/swift-ios-how-to-exclude-livephotos-from-inclusion-in-the-phfetchoptions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!