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
8會員
35內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言
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
開發 iOS 應用程式時,遵循 Apple 的規範和最佳實踐非常重要,以提高應用品質並確保順利通過 App Store 審核。
Thumbnail
隨著 iOS 18.3 RC 版的推出,蘋果再次向用戶展示了即將到來的功能與改進。 這一版本不僅修復了一些已知問題,還為用戶帶來了多項令人期待的新特性。 本文將深入探討 iOS 18.3 正式版中將要登場的關鍵功能和細節變化, 幫助你更好地了解這次更新將如何提升你的使用體驗。一起來看看吧!
Thumbnail
在日常生活中,遺失物品的情況時常發生,尤其是在忙碌的日子裡。 為了幫助用戶更輕鬆地找回失物,Apple 在 iOS 18.2 中推出了令人期待的新功能: 與第三方共享 AirTag 或「尋找」配件的位置。 這一創新功能不僅能提升物品追蹤的便利性, 還能讓你與家人、朋友之間互相協助尋找遺失的物
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
開發 iOS 應用程式時,遵循 Apple 的規範和最佳實踐非常重要,以提高應用品質並確保順利通過 App Store 審核。
Thumbnail
隨著 iOS 18.3 RC 版的推出,蘋果再次向用戶展示了即將到來的功能與改進。 這一版本不僅修復了一些已知問題,還為用戶帶來了多項令人期待的新特性。 本文將深入探討 iOS 18.3 正式版中將要登場的關鍵功能和細節變化, 幫助你更好地了解這次更新將如何提升你的使用體驗。一起來看看吧!
Thumbnail
在日常生活中,遺失物品的情況時常發生,尤其是在忙碌的日子裡。 為了幫助用戶更輕鬆地找回失物,Apple 在 iOS 18.2 中推出了令人期待的新功能: 與第三方共享 AirTag 或「尋找」配件的位置。 這一創新功能不僅能提升物品追蹤的便利性, 還能讓你與家人、朋友之間互相協助尋找遺失的物
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 在文件中建立圖像和文字 尋找相片庫中包含特定人物的照片