Есть ли способ управления порядком сортировки при создании нового альбома для сохранения изображений в библиотеке фотографий? - PullRequest
0 голосов
/ 08 июня 2019

Сводка: Есть ли способ управления порядком сортировки для альбома, созданного приложением на пользовательском устройстве?Я бы хотел, чтобы альбом, который я создал, сортировал по дате, но сортировал по порядку загрузки.

Подробности: Я использую нижеприведенную функцию 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 ?? "")")
            }
        })
    }
}
...