Ho un album di immagini gestito da un server remoto. Vorrei dare all'utente un'opzione per scaricare l'album e memorizzarlo in un album personalizzato in Foto. Ma poiché l'album è dinamico (le foto vengono aggiunte ad esso), l'utente può scaricarlo più volte. Non voglio scaricare più volte le stesse immagini, solo quelle nuove.Verifica se l'immagine esiste in Foto
È possibile associare alcuni metadati (ID univoco) quando memorizzo l'immagine nell'app Foto? E poi controlla se quell'immagine esiste già?
Sto utilizzando Photos Framework per creare l'album personalizzato e salvare le foto.
Edit: Ecco il mio codice per creare l'album personalizzato e salvare le foto
/** Returns the first album from the photos app with the specified name. */
static func getAlbumWithName(name: String, completion: (album: PHAssetCollection?) -> Void) {
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "localizedTitle = %@", name)
let fetchResult = PHAssetCollection.fetchAssetCollectionsWithType(PHAssetCollectionType.Album, subtype: PHAssetCollectionSubtype.Any, options: fetchOptions)
if fetchResult.count > 0 {
guard let album = fetchResult.firstObject as? PHAssetCollection else {return}
completion(album: album)
} else {
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(name)
}, completionHandler: { (result, error) in
if result {
FileUtils.getAlbumWithName(name, completion: completion)
} else {
completion(album: nil)
}
})
}
}
/** Adds an image to the specified photos app album */
private static func addImage(image: UIImage, toAlbum album: PHAssetCollection, completion: ((status: Bool) -> Void)?) {
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
let assetPlaceholder = assetRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: album)
albumChangeRequest?.addAssets([assetPlaceholder!])
}) { (status, error) in
completion?(status: status)
}
}
potrebbe essere utile modificare la domanda per mostrare il codice di come si sta scaricando e salvare le foto in questo album personalizzato –