显示相册中最新 10 张图像的最佳方式是什么?



这就是我正在做的事情。用户可以从相册中选择要使用的相册以及要使用的图像数量。例如 15 张图像。当用户导航到某个控制器视图时,它将显示第一个图像,然后他们单击下一个图像将显示下一个图像。直到他们达到 15 岁。

我正在使用PhotoHelper库来获取图像

var userAlbumArray: [PhotoAlbum] = []
var options = PhotosHelper.defaultImageFetchOptions
options.deliveryMode = .FastFormat
var fetchOptions = PhotosHelper.FetchOptions()
fetchOptions.count = 15
PhotosHelper.getImagesFromAlbum("Album Name", options: options, fetchOptions: fetchOptions, completion: { result in
switch result {
// When options.synchronous is set to true an array of all assets is fetched.
case .Assets(let images):
()
// when options.synchronous is set to false the system fetches one asset at a time calling this completion handler multiple times
case .Asset(let image):
let alb = PhotoAlbum(title: album.localizedTitle ?? "", thumbnail: image)
userAlbumArray.append(alb)
case .Error:
()
}
})
import Foundation
import UIKit
struct PhotoAlbum {
var title: String
var thumbnail: UIImage?
init(title: String, thumbnail: UIImage?) {
self.title = title
self.thumbnail = thumbnail
}
}

由于图像是异步加载的,我的想法是为每个图像创建一个PhotoAlbum对象,并在应用程序初始加载时将其添加到数组中。 然后将数组保存到UserDefaults一旦用户获得视图控制器,它将从UserDefaults获取图像。

我尝试将其保存到用户默认,但我无法做到。可能是因为UIImage。

我是否正确地处理了这个问题,或者有人有更好的建议吗?

我创建了这个函数来从相册中获取x数量的图像:

public static func getImages(albumName: String, number_of_images: Int = 1) -> [PHAsset]{
var assets: [PHAsset] = []
var assetCollection = PHAssetCollection()
var photoAssets = PHFetchResult<AnyObject>()
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
let collection:PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
if let firstObject = collection.firstObject{
// found the album
assetCollection = firstObject
}
let options = PHFetchOptions()
options.fetchLimit = number_of_images
photoAssets = PHAsset.fetchAssets(in: assetCollection, options: options) as! PHFetchResult<AnyObject>
photoAssets.enumerateObjects{(object: AnyObject!,
count: Int,
stop: UnsafeMutablePointer<ObjCBool>) in
if object is PHAsset{
let asset = object as! PHAsset
assets.append(asset)
}
}
return assets
}