2016-04-19 11 views
9

Tôi cần tải tất cả album ảnh trong iPhone.Liệt kê tất cả anbom ảnh trong iOS

Tôi biết tôi có thể bắt đầu bộ chọn hình ảnh để cho phép người dùng chọn hình ảnh từ đó. Nhưng tôi cần phát triển trình duyệt hình ảnh của riêng mình.

Tất cả mã tôi tìm thấy hoạt động với bộ chọn hình ảnh hoặc họ đã biết tên album.

Tôi cần liệt kê tất cả tên album ảnh sau đó người dùng sẽ chọn một trong số họ, sau đó tôi sẽ hiển thị hình ảnh trong album này.

Tất cả các bước này sẽ được thực hiện trong bố cục tùy chỉnh.

Tôi có thể liệt kê tất cả anbom ảnh không?

+0

Bạn có thể xem câu trả lời từ đây: http://stackoverflow.com/questions/32169185/how-to-fetch-all-images-from-custom-photo-album-swift – fatihyildizhan

+0

tôi cần để có được album đầu tiên không phải hình ảnh trong album. Trong trường hợp của tôi, tôi không biết tên album –

+0

Khung ảnh sẽ hoàn thành nó cho bạn. Bạn có thể tìm nạp album, ảnh, v.v. mà không cần sử dụng các phương thức truyền thống. Khá cần thiết để xây dựng bộ chọn ảnh của riêng bạn – NSNoob

Trả lời

7

Tôi sử dụng này để có được chỉ là một vài album nhưng bạn có thể tìm thêm:

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: Điều này sẽ giúp bạn có được PHAssetCollections của album, sau đó tôi đặt chúng trong các tế bào mà có phương pháp này để có hình thu nhỏ hình ảnh mới nhất từ ​​album.

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

trong mã đầu tay biến của album là gì? –

+0

xin lỗi, tôi đã nhầm lẫn xin vui lòng kiểm tra mã đầu một lần nữa: D – SeanLintern88

+0

tuyệt vời .. cảm ơn bạn rất nhiều .. –

7

Simple cách để liệt kê tất cả các album với số lượng hình ảnh.

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

tuyệt vời, nhưng nó chỉ trả lại một album. Câu trả lời của Sean trả về tất cả các album. kiểm tra nó ở đây http://stackoverflow.com/a/36713200/1361120 –

Các vấn đề liên quan