Frage Alle Fotoalben in iOS auflisten


Ich brauche alle Fotoalben im iPhone.

Ich weiß, dass ich die Bildauswahl starten kann, damit der Benutzer ein Bild von ihm auswählt. Aber ich muss meinen eigenen Bildbrowser entwickeln.

Der gesamte Code, den ich gefunden habe, funktioniert mit der Bildauswahl oder sie kennen den Albumnamen bereits.

Ich muss zuerst alle Fotoalbennamen auflisten, dann wählt der Benutzer eine davon aus, dann zeige ich Bilder in diesem Album an.

All diese Schritte werden in benutzerdefinierten Layouts durchgeführt.

Kann ich alle Fotoalben auflisten?


11
2018-04-19 08:44


Ursprung


Antworten:


Ich nutze das, um ein paar Alben zu bekommen, aber du kannst mehr bekommen:

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

BEARBEITEN: Dies wird dir helfen PHAssetCollections von den Alben, dann lege ich sie in Zellen, die diese Methode haben, um das neueste Bild-Thumbnail aus dem Album zu bekommen.

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

7
2018-04-19 08:46



Einfach Möglichkeit, alle Alben mit Bildanzahl aufzulisten.

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

8
2018-04-19 09:09