SWIFT Seleccione todas las fotos de fotos específicas del álbum -- ios campo con swift camp Relacionados El problema

Swift Select All Photos From Specific Photos Album


5
vote

problema

Español

La aplicación puede crear un álbum personalizado en la aplicación Estándar de las fotos de iOS, pero no he podido encontrar una manera para que la aplicación recopile todas las imágenes de ese álbum que se mostrará dentro de la aplicación.

Actualmente, la aplicación es capaz de reunir imágenes de todos los álbumes, simplemente no uno es particular.

  let resultCollections = PHAssetCollection.fetchAssetCollectionsWithType(                  .Album,         subtype: .AlbumRegular,         options: nil)      resultCollections.enumerateObjectsUsingBlock({         (object, index, stop) -> Void in          let collection = object as! PHAssetCollection         let result = PHAsset.fetchAssetsInAssetCollection(collection, options: nil)          result.enumerateObjectsUsingBlock({             (object, index, stop) -> Void in              let asset = object as! PHAsset             self.images.append(asset)          })      })   

He visto otras preguntas que podrían estar marcadas como duplicadas, sin embargo, la mayoría de ellos están hablando de abrir una Uipickerview a un álbum personalizado. Este es un posible duplicado de Cómo recuperar todas las imágenes de Album de fotos personalizado - Swift Sin embargo, nunca fue respondido.

Entonces, ¿cómo puede una aplicación iOS reunir todas las imágenes de un álbum de fotos en particular?

Original en ingles

The app can create a custom album in the standard iOS photos application, but I have been unable to find a way for the app to gather all the images from that album to be displayed within the app.

Currently, the app is able to gather images from all the albums, just not one is particular.

let resultCollections = PHAssetCollection.fetchAssetCollectionsWithType(                  .Album,         subtype: .AlbumRegular,         options: nil)      resultCollections.enumerateObjectsUsingBlock({         (object, index, stop) -> Void in          let collection = object as! PHAssetCollection         let result = PHAsset.fetchAssetsInAssetCollection(collection, options: nil)          result.enumerateObjectsUsingBlock({             (object, index, stop) -> Void in              let asset = object as! PHAsset             self.images.append(asset)          })      }) 

I have seen other questions that might be marked as duplicates, however the majority of them are talking about opening a UIPickerView to a custom album. This is a possible duplicate of How to fetch all images from custom Photo Album - swift however, it was never answered.

So, how can an iOS app gather all images from a particular photos album?

     
       
       

Lista de respuestas

11
 
vote
vote
La mejor respuesta
 

Añadir fettapopciones como abajo

  <?php  while (have_posts() ) : the_post(); ?>      <h2><?php the_title();?></h2>      <p> etc....</p>  <?php endwhile;?> 2  

En realidad, el título del álbum no es un valor único, pueden duplicarse. Así que recomiendo usar Localidentifier como a continuación, si su aplicación accede a varios álbumes.

  <?php  while (have_posts() ) : the_post(); ?>      <h2><?php the_title();?></h2>      <p> etc....</p>  <?php endwhile;?> 3  
 

Add fetchOptions like below

let fetchOptions = PHFetchOptions() fetchOptions.predicate = NSPredicate(format: "title = %@", YourAlbumTitle) let resultCollections = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .AlbumRegular, options: fetchOptions) 

Actually, album title isn't unique value, they can duplicate. so I recommend use localIdentifier like below, if your app access multiple albums.

let fetchOptions = PHFetchOptions() fetchOptions.predicate = NSPredicate(format: "localIdentifier = %@", YourAlbumLocalIdentifier) let resultCollections = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .AlbumRegular, options: fetchOptions) 
 
 
8
 
vote

Código de trabajo para SWIFT 4

Mi respuesta puede ayudarlo a usted y a los demás ( https://stackoverflow.com/a/35178022/4795651 ) pero Luego, también agregando el código aquí .. !!

  <?php  while (have_posts() ) : the_post(); ?>      <h2><?php the_title();?></h2>      <p> etc....</p>  <?php endwhile;?> 4  

para SWIFT 2.1

  <?php  while (have_posts() ) : the_post(); ?>      <h2><?php the_title();?></h2>      <p> etc....</p>  <?php endwhile;?> 5  
 

Working Code For Swift 4

My Answer might help you and others(https://stackoverflow.com/a/35178022/4795651) but then also adding the code here..!!

import Photos   func fetchCustomAlbumPhotos() {     let albumName = "Album Name Here"     var assetCollection = PHAssetCollection()     var albumFound = Bool()     var photoAssets = PHFetchResult<AnyObject>()     let fetchOptions = PHFetchOptions()      fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)     let collection:PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)      if let firstObject = collection.firstObject{         //found the album         assetCollection = firstObject         albumFound = true     }     else { albumFound = false }     _ = collection.count     photoAssets = PHAsset.fetchAssets(in: assetCollection, options: nil) as! PHFetchResult<AnyObject>     let imageManager = PHCachingImageManager()     photoAssets.enumerateObjects{(object: AnyObject!,         count: Int,         stop: UnsafeMutablePointer<ObjCBool>) in          if object is PHAsset{             let asset = object as! PHAsset             print("Inside  If object is PHAsset, This is number 1")              let imageSize = CGSize(width: asset.pixelWidth,                                    height: asset.pixelHeight)              /* For faster performance, and maybe degraded image */             let options = PHImageRequestOptions()             options.deliveryMode = .fastFormat             options.isSynchronous = true              imageManager.requestImage(for: asset,                                               targetSize: imageSize,                                               contentMode: .aspectFill,                                               options: options,                                               resultHandler: {                                                 (image, info) -> Void in                                                 self.photo = image!                                                 /* The image is now available to us */                                                 self.addImgToArray(uploadImage: self.photo!)                                                 print("enum for image, This is number 2")              })          }     } }  func addImgToArray(uploadImage:UIImage) {     self.images.append(uploadImage)  } 

For Swift 2.1

import Photos   func FetchCustomAlbumPhotos() { var albumName = "SwiftAlbum" var assetCollection = PHAssetCollection() var albumFound = Bool() var photoAssets = PHFetchResult()  let fetchOptions = PHFetchOptions() fetchOptions.predicate = NSPredicate(format: "title = %@", albumName) let collection:PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)  if let first_Obj:AnyObject = collection.firstObject{     //found the album     assetCollection = collection.firstObject as! PHAssetCollection     albumFound = true } else { albumFound = false } var i = collection.count photoAssets = PHAsset.fetchAssetsInAssetCollection(assetCollection, options: nil) let imageManager = PHCachingImageManager()  //        let imageManager = PHImageManager.defaultManager()  photoAssets.enumerateObjectsUsingBlock{(object: AnyObject!,     count: Int,     stop: UnsafeMutablePointer<ObjCBool>) in      if object is PHAsset{         let asset = object as! PHAsset         print("Inside  If object is PHAsset, This is number 1")          let imageSize = CGSize(width: asset.pixelWidth,             height: asset.pixelHeight)          /* For faster performance, and maybe degraded image */         let options = PHImageRequestOptions()         options.deliveryMode = .FastFormat         options.synchronous = true          imageManager.requestImageForAsset(asset,             targetSize: imageSize,             contentMode: .AspectFill,             options: options,             resultHandler: {                 (image, info) -> Void in                 self.photo = image!                 /* The image is now available to us */                 self.addImgToArray(self.photo)                 print("enum for image, This is number 2")          })      }   } }  func addImgToArray(uploadImage:UIImage) {     self.images.append(uploadImage)  } 
 
 
1
 
vote

clase Albummodel { Ponte nombre: cadena Deja que cuenta: int Deja que Asset: NsmutableLearray init (nombre: cadena, cuenta: int, activo: nsmutablearray) { auto.name = nombre auto.count = cuenta self.asset = activo } } Clase yourcustomcell: uitableviewcell {

  //MARK:- Properties  @IBOutlet weak var collectionView: UICollectionView!  //MARK:- initialization methods  override func awakeFromNib() {     super.awakeFromNib()   //  setupView() }  override func setSelected(_ selected: Bool, animated: Bool) {     super.setSelected(selected, animated: animated)  }  //MARK:- Setup collectionView datasource and delegate  func setCollectionViewDataSourceDelegate<T:UICollectionViewDataSource & UICollectionViewDelegate>(dataSourceDelegate: T, forRow row: Int) {     collectionView.delegate = dataSourceDelegate     collectionView.dataSource = dataSourceDelegate     collectionView.tag = row     collectionView.reloadData() }   

}

Class ViewController: UIVIEWController {

   var tablearray = NSMutableArray() func getAssetThumbnail(asset: PHAsset) -> UIImage {     let manager = PHImageManager.default()     let option = PHImageRequestOptions()     var thumbnail = UIImage()     option.isSynchronous = true     manager.requestImage(for: asset, targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in         thumbnail = result!     })     return thumbnail }  override func viewDidLoad() {     super.viewDidLoad()     // Do any additional setup after loading the view, typically from a nib.     //print(UnladenSwallow.unknown)      let fetchOptions = PHFetchOptions()      let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: fetchOptions)      let topLevelfetchOptions = PHFetchOptions()      let topLevelUserCollections = PHCollectionList.fetchTopLevelUserCollections(with: topLevelfetchOptions)      let allAlbums = [topLevelUserCollections, smartAlbums]       var name = ""      smartAlbums.enumerateObjects({         if let collection = $0.0 as? PHAssetCollection{              name = collection.localizedTitle!              let image_arry = NSMutableArray()             let result = PHAsset.fetchAssets(in: collection, options: nil)             result.enumerateObjects({ (object, index, stop) -> Void in                 let asset = object                  image_arry.add(self.getAssetThumbnail(asset: asset))             })             let newAlbum = AlbumModel(name: name, count: collection.estimatedAssetCount, asset:image_arry)             self.tablearray.add(newAlbum)         }     })      topLevelUserCollections.enumerateObjects({         if let collection = $0.0 as? PHAssetCollection{              name = collection.localizedTitle!              let image_arry = NSMutableArray()             let result = PHAsset.fetchAssets(in: collection, options: nil)             result.enumerateObjects({ (object, index, stop) -> Void in                 let asset = object                 image_arry.add(self.getAssetThumbnail(asset: asset))             })             let newAlbum = AlbumModel(name: name, count: collection.estimatedAssetCount, asset:image_arry)             self.tablearray.add(newAlbum)         }     })      print(self.tablearray)  }   override func didReceiveMemoryWarning() {     super.didReceiveMemoryWarning()     // Dispose of any resources that can be recreated. }   

}

Extension ViewController: UitableViewDatasource, UITUITVIEWDELEGATE {

  func numberOfSections(in tableView: UITableView) -> Int{     return self.tablearray.count }  func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {     let album =  self.tablearray[section] as! AlbumModel     return album.name } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {     return 1 }  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! yourCustomCell     cell.setCollectionViewDataSourceDelegate(dataSourceDelegate: self, forRow: indexPath.section)      return cell }   

} Extensión ViewController: UicollectionViewDelegate, UicollectionViewDatasource {

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {     let album =  self.tablearray[collectionView.tag] as! AlbumModel     print("count = (album.asset.count)")     return album.asset.count; }  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {      let album =  self.tablearray[collectionView.tag] as! AlbumModel     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "col", for: indexPath)     let img = cell.viewWithTag(111) as! UIImageView     img.image =  album.asset.object(at: indexPath.row) as? UIImage      return cell  }   

}

FUNC Collectioview (CollectiveView: UicollectorView, DIDSSSSELECTITEMATINDEXPATH INDEXPATION: INDEXPATH) {

  print("get selected collectionview itemindex (indexPath.row)")   

}

 

class AlbumModel { let name:String let count:Int let asset:NSMutableArray init(name:String, count:Int, asset:NSMutableArray) { self.name = name self.count = count self.asset = asset } } class yourCustomCell: UITableViewCell {

//MARK:- Properties  @IBOutlet weak var collectionView: UICollectionView!  //MARK:- initialization methods  override func awakeFromNib() {     super.awakeFromNib()   //  setupView() }  override func setSelected(_ selected: Bool, animated: Bool) {     super.setSelected(selected, animated: animated)  }  //MARK:- Setup collectionView datasource and delegate  func setCollectionViewDataSourceDelegate<T:UICollectionViewDataSource & UICollectionViewDelegate>(dataSourceDelegate: T, forRow row: Int) {     collectionView.delegate = dataSourceDelegate     collectionView.dataSource = dataSourceDelegate     collectionView.tag = row     collectionView.reloadData() } 

}

class ViewController: UIViewController {

 var tablearray = NSMutableArray() func getAssetThumbnail(asset: PHAsset) -> UIImage {     let manager = PHImageManager.default()     let option = PHImageRequestOptions()     var thumbnail = UIImage()     option.isSynchronous = true     manager.requestImage(for: asset, targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in         thumbnail = result!     })     return thumbnail }  override func viewDidLoad() {     super.viewDidLoad()     // Do any additional setup after loading the view, typically from a nib.     //print(UnladenSwallow.unknown)      let fetchOptions = PHFetchOptions()      let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: fetchOptions)      let topLevelfetchOptions = PHFetchOptions()      let topLevelUserCollections = PHCollectionList.fetchTopLevelUserCollections(with: topLevelfetchOptions)      let allAlbums = [topLevelUserCollections, smartAlbums]       var name = ""      smartAlbums.enumerateObjects({         if let collection = $0.0 as? PHAssetCollection{              name = collection.localizedTitle!              let image_arry = NSMutableArray()             let result = PHAsset.fetchAssets(in: collection, options: nil)             result.enumerateObjects({ (object, index, stop) -> Void in                 let asset = object                  image_arry.add(self.getAssetThumbnail(asset: asset))             })             let newAlbum = AlbumModel(name: name, count: collection.estimatedAssetCount, asset:image_arry)             self.tablearray.add(newAlbum)         }     })      topLevelUserCollections.enumerateObjects({         if let collection = $0.0 as? PHAssetCollection{              name = collection.localizedTitle!              let image_arry = NSMutableArray()             let result = PHAsset.fetchAssets(in: collection, options: nil)             result.enumerateObjects({ (object, index, stop) -> Void in                 let asset = object                 image_arry.add(self.getAssetThumbnail(asset: asset))             })             let newAlbum = AlbumModel(name: name, count: collection.estimatedAssetCount, asset:image_arry)             self.tablearray.add(newAlbum)         }     })      print(self.tablearray)  }   override func didReceiveMemoryWarning() {     super.didReceiveMemoryWarning()     // Dispose of any resources that can be recreated. } 

}

extension ViewController: UITableViewDataSource,UITableViewDelegate{

func numberOfSections(in tableView: UITableView) -> Int{     return self.tablearray.count }  func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {     let album =  self.tablearray[section] as! AlbumModel     return album.name } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {     return 1 }  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! yourCustomCell     cell.setCollectionViewDataSourceDelegate(dataSourceDelegate: self, forRow: indexPath.section)      return cell } 

} extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {     let album =  self.tablearray[collectionView.tag] as! AlbumModel     print("count = \(album.asset.count)")     return album.asset.count; }  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {      let album =  self.tablearray[collectionView.tag] as! AlbumModel     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "col", for: indexPath)     let img = cell.viewWithTag(111) as! UIImageView     img.image =  album.asset.object(at: indexPath.row) as? UIImage      return cell  } 

}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: IndexPath) {

print("get selected collectionview itemindex \(indexPath.row)") 

}

 
 

Relacionados problema

0  Cómo migrar datos desde el cierre de Alamofire al hilo principal  ( How to migrate data from alamofire closure to main thread ) 
Estoy usando Alamofire para generar una solicitud a una página web aleatoria. Quiero tomar el título de la historia del titular y guardarlo en el hilo princip...

439  Obtener el carácter de una cadena en el lenguaje de programación SWIFT  ( Get nth character of a string in swift programming language ) 
¿Cómo puedo obtener el carácter de una cadena? Probé el soporte ( [] ) Accessor sin suerte. var string = "Hello, world!" var firstChar = string[0] // Thro...

-3  Cómo cambiar el diseño de control segmentado de cuadrado a círculo  ( How to change segmented control design from square to circle ) 
Cómo cambiar el diseño de control segmentado de un cuadrado a círculo como esta imagen de esta foto a esta imagen $("#calendar").fullCalendar( 'cli...

2  FORMATO FECHA SIEMPRE DEVUELVE NIL Cuando se utiliza el formato de fecha 12HR [duplicado]  ( Date format always return nil when using 12hr date format ) 
Esta pregunta ya tiene respuestas aquí : La comparación de Nsdate iOS funciona de manera diferente c...

4  SWIFT: Cómo cambiar solo <img> o tamaños de imagen en WebView  ( Swift how to change only img or image sizes in webview ) 
Estoy recibiendo HTML de un servidor y mostrarlo en un UiWebView. La opción "Página de escala para ajustar" no se selecciona debido al requisito. El ancho de ...

12  ¿Cuál es el uso de la "aplicación" de UICONTROLSTATE "de UBUTTON?  ( Whats the use of uicontrolstate application of uibutton ) 
Fui por la Apple Doc también, pero solo dice que su Banderas adicionales de control-estado disponibles para uso de la aplicación. es solo un método de...

0  Cómo seleccionar la entidad correcta en DIDSSSELECTROWAT INDEXPAY  ( How to select the correct entity in didselectrowat indexpath ) 
MI tableview está ordenado por el atributo private ProgressDialog pDialog; // Creating JSON Parser object JSONParser jsonParser = new JSONParser(); Array...

20  Timer.ScheduledTimer no funciona en SWIFT 3  ( Timer scheduledtimer does not work in swift 3 ) 
Quiero llamar al método func adjustmentBestSongBpmHeartRate() cada 1.1 segundo. Usé el temporizador, pero no funciona. He leído el documento y encontré much...

0  Actualicé Xcode 10.2 a Xcode 11.2.1, lo que resulta en el proyecto SWIFT original que no se puede ejecutar  ( I updated xcode 10 2 to xcode 11 2 1 resulting in the original swift project un ) 
El error de CommandFailed debido a la señal: Abra la trampa: 6 no se ha resuelto. Los registros de errores específicos son los siguientes 2. While running...

0  ¿Cómo puedo cargar la etiqueta debajo de las secciones mediante el pie de página en la TablaView en el SWIFT?  ( How do i can upload label under the sections by using footer in the tableview in ) 
StackOverflow. Entiendo que esos PEADER MAY * tienen muchos métodos para hacer una etiqueta debajo de las celdas como pie de página conocido. Sé cómo crea...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos