2016-04-19 4 views
9

iPhoneのすべてのフォトアルバムを取得する必要があります。iOSのすべてのフォトアルバムを一覧表示

私は画像ピッカーを起動して、ユーザーが画像を選択できるようにすることができます。しかし私は自分のイメージブラウザを開発する必要があります。

イメージピッカーで作業していたコードやアルバム名は既に知っています。

最初にすべてのフォトアルバムの名前をリストアップしてから、ユーザーがその中の1つを選択すると、このアルバムに画像が表示されます。

すべての手順はカスタマイズされたレイアウトで行われます。

すべてのフォトアルバムをリストできますか?

+0

あなたがここからの回答を見ることができます:私は取得する必要がありますhttp://stackoverflow.com/questions/32169185/how-to-fetch-all-images-from-custom-photo-album-swift – fatihyildizhan

+0

アルバムはまずアルバム内の画像ではありません。私の場合、アルバム名はわかりません –

+0

写真フレームワークはあなたのためにそれを完了します。従来の方法を使わずにアルバムや写真などを取り込むことができます。あなた自身の写真ピッカーを構築するために非常に不可欠な – NSNoob

答えて

7

私はほんの数枚のアルバムを得るためにこれを使用しますが、あなたはより多くを得ることができます。

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

EDIT:これはあなたのアルバムの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 
    } 
} 
+0

拳のコードで何がアルバムの変数ですか? –

+0

申し訳ありませんが、間違いを犯しました。もう一度上のコードを確認してください:D – SeanLintern88

+0

素晴らしい..ありがとうございます。 –

7

シンプル方法は、画像の数と、すべてのアルバムをリストします。

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

素晴らしいですが、1枚のアルバムしか返しません。 Seanの答えはすべてのアルバムを返します。ここでそれを確認してくださいhttp://stackoverflow.com/a/36713200/1361120 –

関連する問題