チュートリアルのイメージギャラリーで「このiPad内」の画像をグリッドに追加する機能がある。
内容は、サンドボックスから画像ファイルをアプリ固有のDocumentsに複製をしてリストに登録している。
単純なものではなくコード理解に時間がかかりそう。
なので、ファイルピッカーの今までのまとめ。
ファイルピッカーには色々と有り、ドキュメント、イメージ等、それなりに都合の良い取り出し方となっている。
iPadOS用Swift には、簡単にコード組み込みができる機能が有り、その中に「ファイルエクスポーター」書き込み、「ファイルインポーター」読み込みが用意されている。(URLの取得で読み書きの実体ではない)
Swiftタイトルバー中央のスライダーのようなアイコンをタップして必要な機能をコード配置する。
iPadOS用Swiftで簡単にファイルの読み書きができるように記録するもの。
この機能は、アプリ固有のフォルダの中のファイルにアクセスできる限定使用です。多分。
【ContentView.swift】
import SwiftUI
struct ContentView: View {
@State private var showImport = false
@State private var url: URL? // ファイルURLを取得するため
var body: some View {
VStack {
Button("Import") {
showImport.toggle()
}
if url != nil {
Text(url!.absoluteString)
}
}
.fileImporter(isPresented: $showImport,
allowedContentTypes: [.image],
allowsMultipleSelection: false
) { result in
switch result {
case .success(let directory):
directory.forEach { file in
// アクセス権取得
let gotAccess = file.startAccessingSecurityScopedResource()
if !gotAccess { return }
// ファイルの内容を取得する
do {
url = file
} catch {
print(error.localizedDescription)
}
// アクセス権解放
file.stopAccessingSecurityScopedResource()
}
case .failure(let error):
print(error.localizedDescription)
}
}
onCancellation: {
print("cancell success")
}
}
}
サンドボックスを通ってきたURLなので、そのままでは画像表示できません。
自分がキャンバスに描いたものをファイルエクスポーターで保存したものであれば、
そのまま読み込んで表示できる気がしますが^^。
下記のサイトのサンプルコードが綺麗で分かりやすかったので拝借致しました。
画像選択設定とファイルURL取得を書き換えています。
原文は下記サイトで確認してください。
(”iOSプログラミング【SwiftUI×XCode】【fileImporter】を実装してみよう” で検索。または、# → :)
【情報源サイト】
iOSプログラミング【SwiftUI×XCode】 https#//swappli.com/fileimporter1/
ファイルの読み込み-インポート機能を実装してみよう【fileImporter】
サンプルプログラムの一部を使用させて頂きました。感謝。