2016-11-22 2 views
1

ich die Folge Code verwenden alle Smart-Alben zu holen:iOS PhotoKit: Liefert alle Smart-Alben außer Panoramen

PHAssetCollection.fetchAssetCollections(with: PHAssetCollectionType.smartAlbum, subtype: PHAssetCollectionSubtype.albumRegular, options: nil)

Wie kann ich das Panoramen Smart Album von dieser holen ausschließen? Ich nehme an, dass ich ein Prädikat mit dem Optionen-Parameter hinzufügen muss, aber ich weiß nicht, wie das Prädikat zu formatieren ist.

+0

Wäre es nicht einfacher, einfach das Fetch zu übernehmen und dann das Panoramas-Album zu entfernen oder zu ignorieren? – matt

Antwort

0

Wenn Sie die Panoramen ausschließen möchten, sollten Sie ein Array verwenden und nur die Sammlung abrufen, die Sie benötigen. Mit anderen Worten, Whitelisting-Sammlungen. Oder Sie können durch die Sammlungen aufzählen und die Panoramen ausschließen. Whitelisting gibt Ihnen auch die Kontrolle über die Reihenfolge der Sammlungen.

var smartAlbums: [PHAssetCollection] = [] 
let subtypes:[PHAssetCollectionSubtype] = [ 
    // all photos collection 
    // .smartAlbumUserLibrary, 
    .smartAlbumFavorites, 
    .smartAlbumPanoramas, 
    .smartAlbumLivePhotos, 
    .smartAlbumBursts, 
    .smartAlbumDepthEffect, 
    .smartAlbumLongExposures, 
    .smartAlbumScreenshots, 
    .smartAlbumSelfPortraits 
] 

smartAlbums = fetchSmartCollections(with: .smartAlbum, subtypes: subtypes) 

private func fetchSmartCollections(with: PHAssetCollectionType, subtypes: [PHAssetCollectionSubtype]) -> [PHAssetCollection] { 
    var collections:[PHAssetCollection] = [] 
    let options = PHFetchOptions() 
    options.includeHiddenAssets = false 

    for subtype in subtypes { 
     if let collection = PHAssetCollection.fetchAssetCollections(with: with, subtype: subtype, options: options).firstObject { 
      collections.append(collection) 
     } 
    } 

    return collections 
}