iOS開發:選取&顯示GIF的方法

更新於 發佈於 閱讀時間約 8 分鐘

本篇又名:UIImagePickerController與GIF的形同陌路😂😂😂
結論就是,要選擇GIF要用新的PHPickerViewController(iOS14以上),或是其他第三方套件,UIImagePickerController會把它變成靜態截圖🤨

先準備一張可愛鴨鴨.gif

鴨鴨.gif

鴨鴨.gif


UIImagePickerController

準備一個ViewController,裡面有一個ImageView用來顯示圖片+一個Label顯示圖片的副檔名+一個按鈕開UIImagePickerController

UIImagePickerController的Delegate

extension ViewController: UIImagePickerControllerDelegate,  UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
picker.dismiss(animated: true)
if let url = info[UIImagePickerController.InfoKey.imageURL] as? URL {
if let fileExtension = url.lastPathComponent.components(separatedBy: ".").last {
descLabel.text = "fileExtension: \(fileExtension)"
}
do {
let data = try Data(contentsOf: url)
imageView.image = UIImage(data: data)
} catch {
print(error.localizedDescription)
}
}
}

顯示選到一張jpeg檔

顯示鴨鴨.gif是一張jpeg檔

顯示鴨鴨.gif是一張jpeg檔

原因是UIImagePickerControllerdidFinishPickingMediaWithInfo 方法中,InfoKey.originalImage 返回的是被選取的照片的 UIImage。如果你選擇的是一個 GIF 檔案,originalImage 將是 GIF 的一張靜態快照而不是原始的 GIF 動畫。

另外CHATGPT説如果你想要取得原始的 GIF 檔案的 URL,你可以使用 InfoKey.imageURL

我用了還是給我截圖的jpeg

file:///private/var/mobile/Containers/Data/Application/BA887D86-726D-4D11-94BB-7DC0CB58F174/tmp/167A39CB-D85B-4F51-BDF2-2F2ABFBA4CFD.jpeg

如果要保留完整的GIF檔案,請用新出的PHPickerViewController

PHPickerViewController

開啟PHPickerViewController

@IBAction func openImagePicker(_ sender: UIButton) {
var configuration = PHPickerConfiguration()
configuration.filter = .images //只能選圖片
configuration.selectionLimit = 1 // 一次只選一張
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = self
present(picker, animated: true)
}

選完圖片的Delegate

extension ViewController: PHPickerViewControllerDelegate {
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true)
let result = results.first
guard let selectedResult = results.first else { return }
selectedResult.itemProvider.loadFileRepresentation(forTypeIdentifier: UTType.image.identifier) { (url, error) in
if let error = error {
print("Error loading file representation: \(error.localizedDescription)")
return
}
if let fileURL = url {
// 取得檔案副檔名
let fileExtension = fileURL.pathExtension
print("File Extension: \(fileExtension)")
do {
let data = try Data(contentsOf: fileURL)
DispatchQueue.main.async {
self.imageView.image = UIImage(data: data)
self.descLabel.text = "File Extension: \(fileExtension)"
}
} catch {
print(error.localizedDescription)
}
}

}
}
}


選到gif了!

選到gif了!

圖片為什麼不會動?

上面用PHPickerViewController選到的副檔名是對的,但爲什麼圖片都不會動??

因為UIImage也不支援直接播放GIF動圖XDDDDDD需要另外處理

原生不同方法處理可看大大教學

因為我們已經是iOS13以上了,就用一個最簡單的方法來做

把放圖片那段改成播放GIF動畫

 DispatchQueue.main.async {
let cfData = data as CFData
CGAnimateImageDataWithBlock(cfData, nil) { (_, cgImage, _) in
self.imageView.image = UIImage(cgImage: cgImage)
}
self.descLabel.text = "File Extension: \(fileExtension)"
}

動起來。:.゚ヽ(*´∀`)ノ゚.:。

raw-image




avatar-img
7會員
35內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Michelle Chen的沙龍 的其他內容
這篇文章介紹了 iOS 中常用的 Design Patterns,包括 MVC、MVVM、Singleton、Delegation、Observer 等。同時比較了 Delegate 和 Notification 的使用時機。參考資料中還有更多相關資訊。
本文紀錄了MVC和MVVM的差異,包括各自的優缺點和最大差異,並討論了MVVM的商業邏輯應該寫在哪的問題。
在寫SwiftUI view的時候,碰到一個瓶頸(? 帶有Binding的參數要如何preview。 舉例來說有個右邊圖片左邊文字的View,給他一個@Binding var isActive: Bool的狀態,當active時圖片要跟著改變: struct RightImageView: Vie
雖然我之前文章大力讚美SwiftUI的tabView有多好用,無奈專案大部分都是UIKit啊~~~~要在既有專案用Tab架構只能用UITabBarController了 設計這次還出了一個超複雜的UI,陰影+圓角+客製化高度 大套餐 馬上開始吧。 圓角+陰影 重點就是subclass一個
Sandbox 架構 /Documents:主要用於儲存用戶生成的數據或者不能重新創建的數據。這些可能包括由你的應用程式創建的文件、從服務器下載的文件、用戶在應用程式中創建或修改的數據等。 這些數據在應用程式的生命週期中是持久保存的,即使應用程式被終止或者系統重啟,這些數據也會保留。此外
SwiftUI的TabView實在太好用啦!我要大大的推廣他ლ(╹◡╹ლ) 換頁+小圓點滑動 無限自動輪播 底部Tabbar
這篇文章介紹了 iOS 中常用的 Design Patterns,包括 MVC、MVVM、Singleton、Delegation、Observer 等。同時比較了 Delegate 和 Notification 的使用時機。參考資料中還有更多相關資訊。
本文紀錄了MVC和MVVM的差異,包括各自的優缺點和最大差異,並討論了MVVM的商業邏輯應該寫在哪的問題。
在寫SwiftUI view的時候,碰到一個瓶頸(? 帶有Binding的參數要如何preview。 舉例來說有個右邊圖片左邊文字的View,給他一個@Binding var isActive: Bool的狀態,當active時圖片要跟著改變: struct RightImageView: Vie
雖然我之前文章大力讚美SwiftUI的tabView有多好用,無奈專案大部分都是UIKit啊~~~~要在既有專案用Tab架構只能用UITabBarController了 設計這次還出了一個超複雜的UI,陰影+圓角+客製化高度 大套餐 馬上開始吧。 圓角+陰影 重點就是subclass一個
Sandbox 架構 /Documents:主要用於儲存用戶生成的數據或者不能重新創建的數據。這些可能包括由你的應用程式創建的文件、從服務器下載的文件、用戶在應用程式中創建或修改的數據等。 這些數據在應用程式的生命週期中是持久保存的,即使應用程式被終止或者系統重啟,這些數據也會保留。此外
SwiftUI的TabView實在太好用啦!我要大大的推廣他ლ(╹◡╹ლ) 換頁+小圓點滑動 無限自動輪播 底部Tabbar
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
開發 iOS 應用程式時,遵循 Apple 的規範和最佳實踐非常重要,以提高應用品質並確保順利通過 App Store 審核。
Thumbnail
隨著 iOS 18.3 RC 版的推出,蘋果再次向用戶展示了即將到來的功能與改進。 這一版本不僅修復了一些已知問題,還為用戶帶來了多項令人期待的新特性。 本文將深入探討 iOS 18.3 正式版中將要登場的關鍵功能和細節變化, 幫助你更好地了解這次更新將如何提升你的使用體驗。一起來看看吧!
Thumbnail
在日常生活中,遺失物品的情況時常發生,尤其是在忙碌的日子裡。 為了幫助用戶更輕鬆地找回失物,Apple 在 iOS 18.2 中推出了令人期待的新功能: 與第三方共享 AirTag 或「尋找」配件的位置。 這一創新功能不僅能提升物品追蹤的便利性, 還能讓你與家人、朋友之間互相協助尋找遺失的物
蘋果於iOS 18.2更新中整合OpenAI的ChatGPT進入Siri,提升了智能助手的問答功能。更新還引入了影像生成、書寫工具等新功能,並強調隱私保護,為用戶提供更高效且安全的體驗,並預示未來AI發展潛力。
Thumbnail
本文介紹 macOS 環境開發 iOS 應用程式。先列硬體規格與軟體需求,包括處理器、記憶體等要求和作業系統、開發工具版本要求。然後詳述開發環境設置步驟,像安裝 Flutter SDK 等。也介紹配置 iOS 模擬器和實體設備的方法。最後提及如何檢查開發環境,以及開始開發 iOS 應用的諸多建議。
我自己是希望可以製作iOS app來更好存放我的文章, 更進階一點,可以變成直接錄音後, 照我設定的方式轉換成文檔,讓iPhone變成我更強的助手。 感覺有很多可以探索,用時間慢慢累積經驗。
Thumbnail
iPhone 最新作業系統 iOS 18 控制中心大更新,預設有常用功能、音樂播放器、連線控制三個頁面,並允許使用者自訂頁面,可以直接在控制中心管理所需的功能、調整位置和選擇尺寸。
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
iPhone 和 Mac 免費配備 ChatGPT: • 直接從 Siri 存取 ChatGPT 並提出問題 • 詢問有關您的文件的問題 • 使用 ChatGPT 分享照片並取得建議 • 使用 ChatGPT 在文件中建立圖像和文字 尋找相片庫中包含特定人物的照片
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
開發 iOS 應用程式時,遵循 Apple 的規範和最佳實踐非常重要,以提高應用品質並確保順利通過 App Store 審核。
Thumbnail
隨著 iOS 18.3 RC 版的推出,蘋果再次向用戶展示了即將到來的功能與改進。 這一版本不僅修復了一些已知問題,還為用戶帶來了多項令人期待的新特性。 本文將深入探討 iOS 18.3 正式版中將要登場的關鍵功能和細節變化, 幫助你更好地了解這次更新將如何提升你的使用體驗。一起來看看吧!
Thumbnail
在日常生活中,遺失物品的情況時常發生,尤其是在忙碌的日子裡。 為了幫助用戶更輕鬆地找回失物,Apple 在 iOS 18.2 中推出了令人期待的新功能: 與第三方共享 AirTag 或「尋找」配件的位置。 這一創新功能不僅能提升物品追蹤的便利性, 還能讓你與家人、朋友之間互相協助尋找遺失的物
蘋果於iOS 18.2更新中整合OpenAI的ChatGPT進入Siri,提升了智能助手的問答功能。更新還引入了影像生成、書寫工具等新功能,並強調隱私保護,為用戶提供更高效且安全的體驗,並預示未來AI發展潛力。
Thumbnail
本文介紹 macOS 環境開發 iOS 應用程式。先列硬體規格與軟體需求,包括處理器、記憶體等要求和作業系統、開發工具版本要求。然後詳述開發環境設置步驟,像安裝 Flutter SDK 等。也介紹配置 iOS 模擬器和實體設備的方法。最後提及如何檢查開發環境,以及開始開發 iOS 應用的諸多建議。
我自己是希望可以製作iOS app來更好存放我的文章, 更進階一點,可以變成直接錄音後, 照我設定的方式轉換成文檔,讓iPhone變成我更強的助手。 感覺有很多可以探索,用時間慢慢累積經驗。
Thumbnail
iPhone 最新作業系統 iOS 18 控制中心大更新,預設有常用功能、音樂播放器、連線控制三個頁面,並允許使用者自訂頁面,可以直接在控制中心管理所需的功能、調整位置和選擇尺寸。
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
iPhone 和 Mac 免費配備 ChatGPT: • 直接從 Siri 存取 ChatGPT 並提出問題 • 詢問有關您的文件的問題 • 使用 ChatGPT 分享照片並取得建議 • 使用 ChatGPT 在文件中建立圖像和文字 尋找相片庫中包含特定人物的照片