创建新相册以将图像保存到照片库时,有没有办法控制排序顺序?



摘要:有没有办法控制用户设备上的应用程序创建的相册的排序顺序? 我希望我创建的相册按日期排序,但它按下载顺序排序。

详细信息:我正在使用下面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 ?? "")")
}
})
}
}

而不是像在performChanges'albumChangeRequest!中那样使用addAssets。addAssets(assetEnumeration)'.

您应该在索引处使用 insertAssets 来控制图像添加到相册的位置,就像 NSArray insertObject atIndex 方法一样。

迅速

func insertAssets(_ assets: NSFastEnumeration, 
at indexes: IndexSet)

目标-C

- (void)insertAssets:(id<NSFastEnumeration>)assets 
atIndexes:(NSIndexSet *)indexes;

https://developer.apple.com/documentation/photokit/phassetcollectionchangerequest/1619447-insertassets

相关内容

最新更新