如何通过照片框架快速循环照片库

我有一个应用程序为我的应用程序上的每张票创build一个独特的照片库。 我需要弄清楚如何在图库中循环,这样我就可以一次将图像上传到服务器。 我在YouTube上跟随了这些教程。 ( video )我目前使用Swift作为我的语言。 我的最终目标将是像下面的伪代码。

//I need the following for loop example for photo in gallery { uploadToServer(photo) } //this function works already func uploadToServer(photo:UIImage) { callRest postPhoto } 

这里是我的代码到目前为止无法弄清楚如何循环。 他们虽然。

 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")*/ }) } } 

所以经过马特的一些研究和指导,我已经弄明白了。 这是如何做到这一点。 确保你在主线程上执行这个,所以你必须设置options.synchronous = true。 如果不是由于某种原因,它没有任何价值的照片。

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