2015-03-05 5 views
7

Ich habe eine App, die eine einzigartige Fotogalerie für jedes Ticket in meiner App erstellt. Ich muss herausfinden, wie ich diese Galerie durchlaufen kann, damit ich die Bilder einzeln auf den Server hochladen kann. Ich habe diese Tutorials auf youtube verfolgt. (Video) Ich benutze derzeit Swift als meine Sprache. Mein oberstes Ziel wäre es, so etwas wie den folgenden Pseudo-Code zu haben.So durchlaufen Sie eine Fotogalerie in swift mit Fotorahmen

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

//this function works already 

func uploadToServer(photo:UIImage) 
{ 
    callRest 
    postPhoto 
} 

hier ist mein Code so weit kann nicht herausfinden, wie man durchschleift. sie obwohl.

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

rechts weiter gehen. Was ist der schwierige Teil? – matt

+0

Ich habe Probleme, was zu durchlaufen, ich bin neu zu schnell und iOS-Entwicklung. Ich habe versucht, meine PHAssetCollection durchzulaufen, lassen Sie mich nicht, also habe ich versucht, meine PHFetchResults gleiche Sache zu durchlaufen. Ich bin mir nicht sicher, wie das Fotorahmen funktioniert. – Spikehockey75

+0

Haben Sie das WWDC-Video über das Photos-Framework angeschaut? Es ist ziemlich einfach. – matt

Antwort

8

Also nach ein paar Nachforschungen von Matt habe ich es herausgefunden. Hier ist, wie dies zu tun ist. Stellen Sie sicher, dass Sie dies auch auf dem Haupt-Thread ausführen, damit Sie options.synchronous = true setzen müssen. Aus irgendeinem Grund hat es keinen Wert für die Fotos.

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

Danke eine Million Kumpel ... Ich habe zwei Tage verschwendet, diese über das Internet zu suchen .. !! –

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

Wie hole ich Videos von 10 bis 20, zum Beispiel möchte ich Video mit Paginierung anzeigen, also wollen wir 0 bis 10, 10 bis 20 .... etc holen – user

Verwandte Themen