Обзор. Есть ли способ управлять порядком сортировки для альбома, созданного приложением на пользовательском устройстве? Я бы хотел, чтобы альбом, который я создал, сортировался по дате, но он сортируется по порядку загрузки.
Подробности. Я использую функцию save()
ниже, чтобы сохранить UIImage в альбом на iPhone пользователя. Он отлично работает, но изображение теряет исходное время создания при сохранении копии. Чтобы решить эту проблему, я прочитал время создания, когда загружаю изображение на сервер. Таким образом, я просто назначаю его изображению, когда актив создается с помощью assetChangeRequest.creationDate = storedImageDate
PHPhotoLibrary.shared().performChanges({
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAsset(from: image)
let assetPlaceholder = assetChangeRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(for: assetCollection)
assetChangeRequest.creationDate = storedImageDate
let assetEnumeration:NSArray = [assetPlaceholder!]
albumChangeRequest!.addAssets(assetEnumeration)
}, completionHandler: { success, error in
if error != nil {
print("\(error?.localizedDescription ?? "")")
}
})
Вышеприведенное прекрасно работает, и когда я смотрю на вновь созданное изображение, оно находится в созданном альбоме, изображения имеют правильную дату на изображении, а изображения, просматриваемые в фотопленке, сортируются по дате создания изображения, как и ожидалось. Проблема возникает при переходе в альбом, созданный моим приложением для изображений. Там изображения имеют дату изображения, но они отсортированы по порядку загрузки, а не по изображению. Я также заметил, что когда я долго нажимаю на изображения в альбоме, это позволяет мне перемещать порядок.
Я сделал что-то не так, создавая свой альбом? Могу ли я настроить сортировку по дате изображения? Возможно, есть способ изменить порядок сортировки для моего альбома? Есть ли способ просмотреть альбом, чтобы упорядочить его по дате?
Это полная функция, когда изображение сохраняется в созданный альбом, который не сортируется по дате создания изображения.
func save(image:UIImage, albumName:String) {
var albumFound = false
var assetCollection: PHAssetCollection!
var assetCollectionPlaceholder: PHObjectPlaceholder!
// https://stackoverflow.com/questions/27008641/save-images-with-phimagemanager-to-custom-album
// Check if the Album exists and get collection
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
let collection : PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
if let _: AnyObject = collection.firstObject {
albumFound = true
assetCollection = collection.firstObject
} else {
//If not found - Then create a new album
PHPhotoLibrary.shared().performChanges({
let createAlbumRequest : PHAssetCollectionChangeRequest = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: albumName)
assetCollectionPlaceholder = createAlbumRequest.placeholderForCreatedAssetCollection
}, completionHandler: { success, error in
albumFound = success
if (success) {
let collectionFetchResult = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [assetCollectionPlaceholder.localIdentifier], options: nil)
print(collectionFetchResult)
assetCollection = collectionFetchResult.firstObject
}
})
}
if albumFound {
PHPhotoLibrary.shared().performChanges({
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAsset(from: image)
let assetPlaceholder = assetChangeRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(for: assetCollection)
assetChangeRequest.creationDate = storedImageDate
let assetEnumeration:NSArray = [assetPlaceholder!]
albumChangeRequest!.addAssets(assetEnumeration)
}, completionHandler: { success, error in
if error != nil {
print("\(error?.localizedDescription ?? "")")
}
})
}
}