swift - 显示相册中最新 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
为每个图像创建一个对象,并将其添加到 App 初始加载时的数组中。然后将数组保存到UserDefaults
用户获得视图控制器后,它将从 UserDefaults 中获取图像。
我尝试将其保存到 UserDefault 但我无法做到。可能是因为 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
}
推荐阅读
- javascript - HTML 中的 button#classname 和 button.classname 有区别吗
- php - 使用 PHP 更新 html 页面值
- python - python中的tkinter在窗口中心对齐网格
- laravel - laravel 分页问题 - 所有链接类型都来了
- c - 在 C 中使用二维数组与一维数组的按位运算符进行乘法
- reactjs - 从 redux-store 在页面上渲染文本
- css - 使用 flexbox 创建列
- java - 再次调用 JavaFX 弹出窗口时抛出异常
- flutter - 如何在 Flutter 容器中设置背景颜色
- mysql - 从用户 id 等于用户电子邮件的另一个表上的 id 的表中删除