我有一个应用可以为我的应用上的每个故障单创建一个独特的照片库。我需要弄清楚如何遍历该库,以便我可以一次一个地将图像上传到服务器。我在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")*/
})
}
}
答案 0 :(得分:9)
经过Matt的一些研究和指导,我已经弄明白了。这是怎么做的。确保在主线程上执行此操作,因此必须设置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)")
}
答案 1 :(得分:5)
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)
}
}
}