首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iOS 如何打開自定義圖片庫?App 沙盒限制只能存取自身沙盒內圖片,需自行實作選擇器

     編輯:程式設計疑難解答

iOS App **無法直接存取系統相簿以外的自定義資料夾**,因為沙盒機制限制 App 僅能讀寫自身容器內的檔案(`Documents`、`Library`、`tmp` 等目錄)。

實作自定義圖片選擇器的標準流程

  1. 將圖片打包進 App Bundle(唯讀):放入 `Assets.xcassets` 或 `Bundle Resources`,透過 `UIImage(named:)` 載入。
  2. 或下載/產生圖片至沙盒 Documents 目錄(可讀寫):
    
    let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let dir = urls[0].appendingPathComponent("MyCustomAlbum")
    try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true)
    
  3. 建立 UICollectionView / PHPickerViewController(iOS 14+)展示沙盒內圖片:
    • 掃描目錄取得圖片路徑陣列。
    • 用 `PHPickerViewController`(推薦,隱私友善、不需權限)或自訂 `UICollectionView` 顯示縮圖。
    • 使用者選擇後回傳 `UIImage` 或檔案路徑給業務邏輯。

關鍵 API

  • `PHPickerViewController`(iOS 14+):系統原生選擇器,可限制媒體類型、選擇數量,回傳 `PHPickerResult` 含 `itemProvider` 可載入圖片。
  • `UIDocumentPickerViewController`:若需讓使用者從「檔案 App」選擇圖片(支援 iCloud、第三方雲端),適用於開放文件存取場景。
  • `UIImagePickerController`(舊 API,已不推薦):需相簿權限,僅能存取系統相簿。

程式碼片段(PHPicker 範例)


var config = PHPickerConfiguration()
config.filter = .images
config.selectionLimit = 1
let picker = PHPickerViewController(configuration: config)
picker.delegate = self
present(picker, animated: true)

// PHPickerViewControllerDelegate
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    picker.dismiss(animated: true)
    guard let provider = results.first?.itemProvider,
          provider.canLoadObject(ofClass: UIImage.self) else { return }
    provider.loadObject(ofClass: UIImage.self) { image, _ in
        DispatchQueue.main.async {
            self.selectedImage = image as? UIImage
        }
    }
}

結論:**無法呼叫系統「自定義相簿」介面**,請在自家沙盒目錄管理圖片,並自行實作或使用 `PHPickerViewController` 選擇器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved