前言

在 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. 確保在模擬器中使用相片時選擇正確的相簿。

延伸應用

除了基本的相片存取與管理,你還可以考慮增加以下功能:
– 建立自定義相簿並管理相片。
– 設計相片編輯功能,例如裁剪或添加濾鏡。
– 整合雲端相簿管理,提供更靈活的使用方式。

Swift 相簿 📷 相片存取、相片選擇、相片增加

Q&A(常見問題解答)

Q1: 如何處理用戶拒絕授權的情況?

A1: 可以引導用戶前往設定頁面重新授權,並告知他們為何需要這個授權。

Q2: 如何在相簿中尋找特定相片?

A2: 可以使用 PHFetchOptions 配合關鍵字或相片屬性進行搜尋。

Q3: 是否可以批量上傳多張相片?

A3: 是的,使用 PHAssetChangeRequest 可以實現批量新增相片的功能,只需將多個佔位符加入請求即可。

Categorized in:

Tagged in:

,