アニメーションGIFを写真.app(Photos.app)に保存する方法を紹介します。
UIImageViewを配置してアニメーションGIFを読み込みます。
sample1.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var kImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "http://example.com/sample.gif")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, response, error in
self.kImageView.image = UIImage(data: data!)
})
task.resume()
}
}
アニメーションGIFを写真.appに保存するためにはPhotos.framework
を利用します。
sample2.swift
import UIKit
import Photos
class ViewController: UIViewController {
@IBOutlet weak var kImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "http://example.com/sample.gif")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, response, error in
self.kImageView.image = UIImage(data: data!)
let url = NSURL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true).URLByAppendingPathComponent("tmp.gif")
data?.writeToURL(url, atomically: true)
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromImageAtFileURL(url)
}, completionHandler: nil)
})
task.resume()
}
}
アニメーションGIFのデータを一度ファイルに書き出すのがポイントです。
UIImageWriteToSavedPhotosAlbum()
や PHAssetChangeRequest.creationRequestForAssetFromImage()
などUIImageを引数にとるものでは1コマ目だけが保存され静止画となります。
写真.appを開くとアニメーションGIFが保存されていることがわかります。
しかし写真.appでは静止画となってしまいアニメーションが再生されません。
アニメーションGIFであることを確認するために共有をタップしてメールに添付します。
これでアニメーションGIFであることが確認できます。