タブレット用プログラムの書き止め

android OS & iPadOS の記録。

【Swift P4.5.1】画像ファイルをUIImageデータに変換して表示する

2024-09-16 15:04:29 | Swift iPadOS用

チュートリアルのイメージギャラリーは、選択したファイルをアプリ固有のDocumentsフォルダに複製し利用していた。
色々と検索をして理解をしていたところ、PhotoPickerで選択した後にUIImageデータに変換すると画像データを利用できる事が分かった。
単純に画像表示するなら、この方法で問題ないだろう。


【MyApp.swift】
import SwiftUI

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}


【ContentView.swift】
import SwiftUI
import PhotosUI

struct ContentView: View {
    @State var selectedItem: PhotosPickerItem?
    @State var selectedImage: UIImage?
    
    var body: some View {
        VStack {
            
            if selectedImage != nil {
                Image(uiImage: selectedImage!)
                    .resizable()
                    .aspectRatio( contentMode: .fill )
            }
            else {
                PhotosPicker(selection: $selectedItem, matching: .images, photoLibrary: .shared()) {
                    Text("Photo Picker を表示します")
                }
            }
        }
        .onChange(of: selectedItem) { item in
            Task {
                guard let data = try? await item?.loadTransferable(type: Data.self) else { return }
                guard let uiImage = UIImage(data: data) else { return }
                selectedImage = uiImage
            }
        }
    }
}


サンドボックス構造のファイルに直接アクセスはできないが、システムのピッカーで選択してデータ変換されたものは利用できる。
外部の記憶領域にアクセスする画像ビュワーを作るのは苦戦しそうだが、画像ファイルを修正するアプリはできそうな気がする。

PhotosPickerは、iPadOS 16以降で利用できるそう。