我需要在iPhone上获取所有相册。
我知道我可以启动图像选择器让用户从中选择图像。但我需要开发自己的图像浏览器。
我发现的所有代码都与图像选择器一起使用,或者他们已经知道了专辑名称。
我首先需要列出所有相册名称,然后用户将选择其中一个,然后我将在此相册中显示图像。
所有这些步骤都将在自定义布局中完成。
我可以列出所有相册吗?
我需要在iPhone上获取所有相册。
我知道我可以启动图像选择器让用户从中选择图像。但我需要开发自己的图像浏览器。
我发现的所有代码都与图像选择器一起使用,或者他们已经知道了专辑名称。
我首先需要列出所有相册名称,然后用户将选择其中一个,然后我将在此相册中显示图像。
所有这些步骤都将在自定义布局中完成。
我可以列出所有相册吗?
我用它来获得几张专辑,但你可以得到更多:
private func setupPhotos() {
let fetchOptions = PHFetchOptions()
let smartAlbums = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .Any, options: fetchOptions)
let topLevelfetchOptions = PHFetchOptions()
let topLevelUserCollections = PHCollectionList.fetchTopLevelUserCollectionsWithOptions(topLevelfetchOptions)
let allAlbums = [topLevelUserCollections, smartAlbums]
for i in 0 ..< allAlbums.count {
let result = allAlbums[i]
result.enumerateObjectsUsingBlock { (asset, index, stop) -> Void in
if let a = asset as? PHAssetCollection {
let opts = PHFetchOptions()
if #available(iOS 9.0, *) {
opts.fetchLimit = 1
}
let ass = PHAsset.fetchAssetsInAssetCollection(a, options: opts)
if let _ = ass.firstObject {
let obj = MYSpecialAssetContainerStruct(asset: a)
self.data.append(obj)
}
}
if i == (allAlbums.count - 1) && index == (result.count - 1) {
self.data.sortInPlace({ (a, b) -> Bool in
return a.asset.localizedTitle < b.asset.localizedTitle
})
self.tableView.reloadData()
}
}
}
}
编辑: 这会得到你的 PHAssetCollections
然后我将它们放在具有此方法的单元格中,以便从相册中获取最新的图像缩略图。
private func downloadAndSetImage(asset: MYSpecialAssetContainerStruct) {
if asset.thumbnail == nil {
let imageRequestOptions = PHImageRequestOptions()
imageRequestOptions.networkAccessAllowed = false
imageRequestOptions.synchronous = true
imageRequestOptions.deliveryMode = .HighQualityFormat
PHImageManager.defaultManager().requestImageForAsset(
asset.asset,
targetSize: self.targetImageSize(),
contentMode: .AspectFit,
options: imageRequestOptions,
resultHandler: { (img, info) -> Void in
asset.thumbnail = img
self.albumImage.image = asset.thumbnail
})
} else {
albumImage.image = asset.thumbnail
}
}
简单 列出具有图像计数的所有相册的方法。
class AlbumModel {
let name:String
let count:Int
let collection:PHAssetCollection
init(name:String, count:Int, collection:PHAssetCollection) {
self.name = name
self.count = count
self.collection = collection
}
}
func listAlbums() {
var album:[AlbumModel] = [AlbumModel]()
let options = PHFetchOptions()
let userAlbums = PHAssetCollection.fetchAssetCollectionsWithType(PHAssetCollectionType.Album, subtype: PHAssetCollectionSubtype.Any, options: options)
userAlbums.enumerateObjectsUsingBlock{ (object: AnyObject!, count: Int, stop: UnsafeMutablePointer) in
if object is PHAssetCollection {
let obj:PHAssetCollection = object as! PHAssetCollection
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue)
let newAlbum = AlbumModel(name: obj.localizedTitle!, count: obj.estimatedAssetCount, collection:obj)
album.append(newAlbum)
}
}
for item in album {
print(item)
}
}