簡體   English   中英

列出iOS中的所有相冊

[英]List all photo albums in iOS

我需要在 iPhone 上獲取所有相冊。

我知道我可以啟動一個圖像選擇器讓用戶從中選擇一個圖像。 但我需要開發自己的圖像瀏覽器。

我發現的所有代碼都適用於圖像選擇器,或者他們已經知道專輯名稱。

我需要首先列出所有相冊名稱,然后用戶將選擇其中一個,然后我將在該相冊中顯示圖像。

所有這些步驟都將在自定義布局中完成。

我可以列出所有相冊嗎?

用圖像計數列出所有相冊的簡單方法。

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)
    }
}

我用它來獲得幾張專輯,但你可以獲得更多:

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
        }
    )
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM