利用 CGAnimateImageDataWithBlock & CGAnimateImageAtURLWithBlock 播放 gif
Published in
4 min readOct 20, 2020
從 iOS 13 開始,我們可以利用 function CGAnimateImageDataWithBlock & CGAnimateImageAtURLWithBlock 播放 gif 了 !
方法如下。
在 storyboard 加入播放 gif 的 image view & 連結 outlet
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
將 gif 檔加到 assets
播放 gif
override func viewDidLoad() {
super.viewDidLoad()
guard let data = NSDataAsset(name: "animated-cat-image-72")?.data else { return }
let cfData = data as CFData
CGAnimateImageDataWithBlock(cfData, nil) { _, cgImage, _ in
self.imageView.image = UIImage(cgImage: cgImage)
}
}
呼叫 CGAnimateImageDataWithBlock 產生的動畫圖片將在 closure 的第二個參數裡,它的型別是 CGImage,因此我們可將它變成 UIImage,然後顯示到 image view。
剛剛的例子透過 CGAnimateImageDataWithBlock 將 gif 的 data 變成動畫圖片,不過我們也可以使用另一個方法,透過 CGAnimateImageAtURLWithBlock 搭配 gif 的 URL 產生動畫圖片,方法如下:
將 gif 檔加到 project navigator
播放 gif
override func viewDidLoad() {
super.viewDidLoad()
guard let url = Bundle.main.url(forResource: "animated-cat-image-0072", withExtension: "gif") else { return }
let cfUrl = url as CFURL
CGAnimateImageAtURLWithBlock(cfUrl, nil) { _, cgImage, _ in
self.imageView.image = UIImage(cgImage: cgImage)
}
}
呼叫 CGAnimateImageAtURLWithBlock 產生的動畫圖片將在 closure 的第二個參數裡,它的型別是 CGImage,因此我們可將它變成 UIImage,然後顯示到 image view。