我需要在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()
}

编辑:这将使您获得相册的PHAssetCollections,然后将它们放在具有此方法的单元格中,以从相册中获取最新的图像缩略图。
private func downloadAndSetImage(asset: MYSpecialAssetContainerStruct) {
    guard asset.thumbnail == nil else {
        albumImage.image = asset.thumbnail
        return
    }

    let imageRequestOptions = PHImageRequestOptions()
    imageRequestOptions.isNetworkAccessAllowed = false
    imageRequestOptions.isSynchronous = true
    imageRequestOptions.deliveryMode = .highQualityFormat

    PHImageManager.default().requestImage(
        for: asset.asset,
        targetSize: CGSize(width: 200, height: 200),
        contentMode: .aspectFit,
        options: imageRequestOptions,
        resultHandler: {(img, info) in
            asset.thumbnail = img
            self.albumImage.image = asset.thumbnail
        }
    )
}

关于ios - 列出iOS中的所有相册,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36713164/

10-11 14:56