2017-06-28 49 views
2

在iOS系統PhotoKit PHAssetCollections,我可以獲取所有非空專輯是這樣的:只獲取包含至少一個照片

let fetchOptions = PHFetchOptions() 
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetResourceType.photo.rawValue) 
let fetchResults = PHAsset.fetchAssets(in: collection, options: fetchOptions) 

let fetchOptions = PHFetchOptions() 
fetchOptions.predicate = NSPredicate(format: "estimatedAssetCount > 0") 
let albumFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: albumFetchOptions) 

albumFetchResult.enumerateObjects({ (collection, _, _) in 
    // Do something with the album... 
}) 

然後,我可以從相冊中像這樣得到的只有照片

但是第一部分可以給我只有視頻的專輯,這意味着在我將謂詞應用到第二部分後,專輯將是空的。在我開始使用它們之前,有沒有辦法在第一部分中篩選出這些專輯?

回答

0

看來,集合不能像這樣過濾,也不會獲取集合中的項目。有關可用的提取選項,請參見the docs;沒有一個允許按特定類型的媒體進行過濾。

我將實現這一目標的方式是獲取用戶創建的所有相冊,然後使用僅返回圖像的謂詞從相冊中提取資源。

所以把它放在代碼:

var userCollections: PHFetchResult<PHAssetCollection>! 
// Fetching all PHAssetCollections with at least some media in it 
let options = PHFetchOptions() 
    options.predicate = NSPredicate(format: "estimatedAssetCount > 0") 
// Performing the fetch 
userCollections = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: options) 

接下來,獲取從集合,是圖像資產通過指定謂詞:

// Getting the specific collection (I assumed to use a tableView) 
let collection = userCollections[indexPath.row] 
let optionsToFilterImage = PHFetchOptions() 
    optionsToFilterImage.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue) 
// Fetching the asset with the predicate to filter just images 
let justImages = PHAsset.fetchAssets(in: collection, options: optionsToFilterImage) 

最後,計算圖像的數量:

if justImages.count > 0 { 
    // Display it 
} else { 
    // The album has no images 
} 
+0

對我不起作用:( –

+0

它給你視頻結果?albumFetchResult常量是用戶創建的所有相冊的集合...獲取您需要使用PHImageManager的單個圖像......如果您稍微多解釋一下您嘗試實現的內容,我會盡力幫助您解決問題 – Marco

+0

要測試此功能,我創建了一個只包含視頻的專輯。我試圖實現的是'albumFetchResult'從其獲取結果中排除這樣的專輯 - 即只應該包含至少有一張照片的專輯。在獲取相冊時使用'.albumRegular'作爲子類型並不能達到這個目的。 –

相關問題