利用 CGAnimateImageDataWithBlock & CGAnimateImageAtURLWithBlock 播放 gif

從 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。

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com