根据图片的内容,类型,大小,分别进行保存并统计数量
直接上代码,之后进行解释和说明
@IBAction func saveImages(sender: UIBarButtonItem) {
var emojis = 0
var gazous = 0
var photos = 0
var executings = [Bool]()
var complete = true
for _ in saveImages {
executings.append(true)
}
for (i, URL) in saveImages.enumerate() {
Alamofire.request(.GET, URL.absoluteString).responseData({ (req, response, res) -> Void in
defer {
executings[i] = false
}
switch res {
case .Failure(_, _): ()
case .Success(let data):
guard let image = UIImage(data: data) else {
return
}
switch self.imageType(data) {
case .Gif:
let imageId = "\(self.MD5(data))-\(data.length).gif"
if image.size.width <= 20 && image.size.height <= 20 {
self.saveImageNameInRealm(Deco.EmojiId, imageID: imageId)
self.saveImageInFolder(Deco.EmojiId, imageID: imageId, data: data)
emojis++
} else {
self.saveImageNameInRealm(Deco.GazouId, imageID: imageId)
self.saveImageInFolder(Deco.GazouId, imageID: imageId, data: data)
gazous++
}
default:
UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil)
photos++
}
}
})
}
while executings.filter({ $0 }).count > 0 {
NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow:0.01))
}
let alertView = UIAlertController(title: "保存が完了しました", message: "绘文字 : \(emojis)\n图片 : \(gazous)\n相册照片 : \(photos)\n", preferredStyle: .Alert)
let okAction = UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in
self.dismissViewControllerAnimated(true, completion: nil)
})
alertView.addAction(okAction)
self.presentViewController(alertView, animated: true, completion:nil)
}
首先,代码中的一些函数方法我已经在之前的小结文章中涉及到了,方法名也是一样的,如果有个别函数或者方法不明白的话,可以翻阅以前的文章。
这里做一个总结,对图片的类型和属性进行一个判断并且根据不同的类型,存放到不同的文件夹中,在统计图片各个类型数量的时候,由于下载图片是子线程中进行的,我们在做统计的时候必须要在主线程中进行,我实现的方法就是利用循环和NSRunLoop
如果数组内部有没有下载完成的图片则不会执行后面的套alertView的方法。全部都下载完成后,代码再次运行,这里NSRunLoop
那行代码有让代码停止的神奇功效!相当方便。
下面贴出保存时候的代码:
/// 图片保存到本地
func saveImageInFolder(decoFolder: String, imageID: String, data: NSData) {
let folderId = self.getDecoFolders(decoFolder).first!.identifier
let folderPath = Path.Document.directory.stringByAppendingPathComponent("decos/\(decoFolder)/\(folderId)")
try! NSFileManager.defaultManager().createDirectoryAtPath(folderPath, withIntermediateDirectories: true, attributes: nil)
let filePath = folderPath.stringByAppendingPathComponent(imageID)
data.writeToFile(filePath, atomically: true)
}
/// 图片保存到相册
func image(image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutablePointer<Void>) {
if error != nil {
LOG(error.code)
} else {
LOG("OK")
}
}
ok!完成!