列出iOS中的所有相册

列出iOS中的所有相册,ios,swift,Ios,Swift,我需要在iPhone上获取所有相册 我知道我可以启动图像选择器,让用户从中选择图像。但我需要开发自己的图像浏览器 我找到的所有代码都与图像选择器一起工作,或者他们已经知道相册名称 我需要首先列出所有相册名称,然后用户将选择其中一个,然后我将显示此相册中的图像 所有这些步骤都将在自定义布局中完成 我可以列出所有相册吗?我使用此功能只获得一些相册,但您可以获得更多: private func setupPhotos() { let fetchOptions = PHFetchOptions(

我需要在iPhone上获取所有相册

我知道我可以启动图像选择器,让用户从中选择图像。但我需要开发自己的图像浏览器

我找到的所有代码都与图像选择器一起工作,或者他们已经知道相册名称

我需要首先列出所有相册名称,然后用户将选择其中一个,然后我将显示此相册中的图像

所有这些步骤都将在自定义布局中完成


我可以列出所有相册吗?

我使用此功能只获得一些相册,但您可以获得更多:

private func setupPhotos() {
    let fetchOptions = PHFetchOptions()
    let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: fetchOptions)
    let topLevelUserCollections = PHCollectionList.fetchTopLevelUserCollections(with: fetchOptions)
    let allAlbums = [topLevelUserCollections, smartAlbums]

    allAlbums.enumerateObjects {(assetCollection, index, stop) in

        if #available(iOS 9.0, *) {
            fetchOptions.fetchLimit = 1
        }

        let assets = PHAsset.fetchAssets(in: assetCollection, options: fetchOptions)
        if let _ = assets.firstObject {
            let assetObject = MYSpecialAssetContainerStruct(asset: assets)
            self.myDataArray.append(assetObject)
        }
   }
   self.myDataArray.sortInPlace {(a, b) in
       return a.asset.localizedTitle < b.asset.localizedTitle
   }
   tableView.reloadData()
}
列出具有图像计数的所有相册的简单方法

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.fetchAssetCollections(with: .album, subtype: .any, options: options)
    userAlbums.enumerateObjects{ (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)
    }
}

对不起,我犯了一个错误。请再次检查顶部代码:D@SeanLintern88:它不提供通过iTunes添加的图片,我该怎么办?代码不在Swift 4中运行。“NSObject”类型的值没有成员“enumerateObjectsUsingBlock”。“结果”变量错误该代码不是作为复制/粘贴解决方案提供的,它是了解请求收藏/相册流程的指南。您可以从这里看到答案:我需要先获取相册,而不是相册中的图像。在我的情况下,我不知道相册名称照片框架将为您完成它。您可以不使用传统方法获取相册、照片等。对于构建自己的照片采集器来说,这是非常必要的。它可以正常工作,但只返回一个相册。肖恩的回答返回所有专辑。点击这里@mohammad farrahi,谢谢你的编辑请求。我刚刚批准了。
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.fetchAssetCollections(with: .album, subtype: .any, options: options)
    userAlbums.enumerateObjects{ (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)
    }
}