2015-03-05 11 views
7

Ho un'app che crea una galleria fotografica unica per ogni biglietto sulla mia app. Ho bisogno di capire come scorrere attraverso quella galleria in modo da poter caricare le immagini sul server una alla volta. Ho seguito questi tutorial su youtube. (Video) Attualmente sto usando Swift come lingua. il mio obiettivo finale sarebbe avere qualcosa come il seguente pseudo codice.Come scorrere una galleria fotografica in modo rapido con la struttura delle foto

//I need the following for loop example 
for photo in gallery 
{ 
    uploadToServer(photo) 
} 

//this function works already 

func uploadToServer(photo:UIImage) 
{ 
    callRest 
    postPhoto 
} 

questo è il mio codice fino a ora non è possibile capire come eseguire il ciclo. loro però.

let fetchOptions = PHFetchOptions() 
fetchOptions.predicate = NSPredicate(format: "title = %@", self.albumName)? 
let collection:PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions) 

if let first_Obj:AnyObject = collection.firstObject{ 
    //found the album 
    self.assetCollection = collection.firstObject as PHAssetCollection 
    self.albumFound = true 
} 
else { albumFound = false } 
var i = collection.count 
self.photoAssets = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil) 


self.photoAssets.enumerateObjectsUsingBlock{(object: AnyObject!, 
    count: Int, 
    stop: UnsafeMutablePointer<ObjCBool>) in 

    if object is PHAsset{ 
     let asset = object as PHAsset 
     println("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 

     imageManager.requestImageForAsset(asset, 
      targetSize: imageSize, 
      contentMode: .AspectFill, 
      options: options, 
      resultHandler: { 
       (image, info)->Void in 

       self.photo = image 

       var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
       var server = defaults.objectForKey("imageServer") as String! 
       var error: NSError? = nil 

       var imageData = UIImageJPEGRepresentation(self.photo, 90) 
       var url = NSURL(string: server) 
       var request = NSMutableURLRequest(URL: url!) 
       request.HTTPMethod = "POST" 
       //request.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type") 
       request.HTTPBody = imageData 

       var response: NSURLResponse? = nil 

       let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&error) 

       let results = NSString(data:reply!, encoding:NSUTF8StringEncoding) 
       println("API Response: \(results)") 

       /* 
       /* The image is now available to us */ 
       self.sendPhotos(image) 
       println("enum for image, This is number 2")*/ 


     }) 
    } 
} 
+0

andare avanti a destra. Qual è la parte difficile? – matt

+0

Ho problemi di cosa scorrere, sono nuovo allo sviluppo rapido e iOS. Ho provato a scorrere il mio PHAssetCollection, non mi permette così ho provato a scorrere attraverso la mia stessa cosa PHFetchResults. Non sono sicuro di come funzioni il framework fotografico. – Spikehockey75

+0

Hai guardato il video WWDC sul framework Photos? È piuttosto semplice. – matt

risposta

8

Quindi dopo alcune ricerche e indicazioni da parte di Matt, l'ho capito. Ecco come farlo. Assicurati di eseguirlo anche sul thread principale, quindi devi impostare options.synchronous = true. Se non per qualche motivo non ha alcun valore per le foto.

func getSyncPhotos() 
{ 
    self.albumName = String(self.ticket_id!) 

    let fetchOptions = PHFetchOptions() 
    fetchOptions.predicate = NSPredicate(format: "title = %@", self.albumName)? 
    let collection:PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions) 

    if let first_Obj:AnyObject = collection.firstObject{ 
     //found the album 
     self.assetCollection = collection.firstObject as PHAssetCollection 
     self.albumFound = true 
    } 
    else { albumFound = false } 
    var i = collection.count 
    self.photoAssets = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil) 
    let imageManager = PHCachingImageManager() 

    self.photoAssets.enumerateObjectsUsingBlock{(object: AnyObject!, 
     count: Int, 
     stop: UnsafeMutablePointer<ObjCBool>) in 

     if object is PHAsset{ 
      let asset = object as PHAsset 
      println("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 in 
        self.photo = image! 
        /* The image is now available to us */ 
        self.sendPhotos(self.photo) 
        println("enum for image, This is number 2") 


      }) 
     } 
    } 
} 

func sendPhotos(uploadImage:UIImage) 
{ 

    var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
    var server = defaults.objectForKey("imageServer") as String! 
    var error: NSError? = nil 

    var imageData = UIImageJPEGRepresentation(uploadImage, 90) 
    var url = NSURL(string: server) 
    var request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "POST" 
    //request.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type") 
    request.HTTPBody = imageData 

    var response: NSURLResponse? = nil 

    let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&error) 

    let results = NSString(data:reply!, encoding:NSUTF8StringEncoding) 
    println("API Response: \(results)") 
} 
+0

Grazie mille amico ... Ho perso due giorni a cercarlo su internet .. !! –

2
func fetchVideoFromLibrary() { 
     let fetchOptions: PHFetchOptions = PHFetchOptions() 
     fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 
     let fetchResult = PHAsset.fetchAssetsWithMediaType(.Video, options: fetchOptions) 
     fetchResult.enumerateObjectsUsingBlock { (object, index, stop) -> Void in 
      let options = PHImageRequestOptions() 
      options.synchronous = true 
      options.deliveryMode = .HighQualityFormat 
      PHImageManager.defaultManager().requestAVAssetForVideo(object as! PHAsset, options: .None) { (avAsset, avAudioMix, dict) -> Void in 
       print(avAsset) 
      } 
     } 
    } 
+0

Come recuperare i video da 10 a 20, ad esempio voglio mostrare il video usando la paginazione, quindi voglio recuperare da 0 a 10, da 10 a 20 .... ecc. – user

Problemi correlati