前言
在 iOS 開發中,操作相簿是每位開發者必須掌握的重要技能。透過 Swift,你可以輕鬆地對相片進行存取、選擇和新增等操作。本篇文章將為你介紹如何使用最新的 Swift 語法(2025)來實現這些功能。
存取相簿
在存取相簿之前,首先需要獲得用戶的授權。以下是如何使用 PHPhotoLibrary 來請求授權的範例:
PHPhotoLibrary.requestAuthorization { (status) in
switch status {
case .authorized:
print("授權已取得")
case .denied:
print("使用者拒絕授權")
case .notDetermined:
print("授權尚未決定")
case .restricted:
print("授權受限")
@unknown default:
fatalError("未知的授權狀態")
}
}
接下來,可以使用 PHAssetCollection 來取得相簿的資料:
let assetCollections = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: nil)
if let firstCollection = assetCollections.firstObject {
print("找到相簿:\(firstCollection.localizedTitle ?? "無標題")")
}
選擇相片
當取得授權後,你可以使用 PHFetchOptions 來選擇相片。以下是一個範例,顯示如何按照創建日期來獲取相片:
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
if let assets = PHAsset.fetchAssets(in: firstCollection, options: fetchOptions) {
print("相片數量:\(assets.count)")
}
增加相片
若你需要將新相片增加到相簿中,則可以利用 PHAssetChangeRequest,以下是具體實作的範例:
PHPhotoLibrary.shared().performChanges({
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAsset(from: image)
if let assetPlaceholder = assetChangeRequest.placeholderForCreatedAsset {
let albumChangeRequest = PHAssetCollectionChangeRequest(for: firstCollection)
albumChangeRequest?.addAssets([assetPlaceholder] as NSArray)
}
}) { (success, error) in
if success {
print("成功新增相片")
} else if let error = error {
print("新增相片失敗:\(error.localizedDescription)")
}
}
錯誤排除
在實作過程中,若遇到授權問題或相片無法存取,請檢查以下幾個重點:
1. 確保在 Info.plist 中加入相應的隱私權描述,例如 `NSPhotoLibraryUsageDescription`。
2. 檢查設備是否有相片存儲。
3. 確保在模擬器中使用相片時選擇正確的相簿。
延伸應用
除了基本的相片存取與管理,你還可以考慮增加以下功能:
– 建立自定義相簿並管理相片。
– 設計相片編輯功能,例如裁剪或添加濾鏡。
– 整合雲端相簿管理,提供更靈活的使用方式。
Q&A(常見問題解答)
Q1: 如何處理用戶拒絕授權的情況?
A1: 可以引導用戶前往設定頁面重新授權,並告知他們為何需要這個授權。
Q2: 如何在相簿中尋找特定相片?
A2: 可以使用 PHFetchOptions 配合關鍵字或相片屬性進行搜尋。
Q3: 是否可以批量上傳多張相片?
A3: 是的,使用 PHAssetChangeRequest 可以實現批量新增相片的功能,只需將多個佔位符加入請求即可。
—