import SwiftUI
import PhotosUI
struct ContentView: View {
@State private var selectedItem: PhotosPickerItem?
@State private var selectedImage: UIImage?
@State private var selectedVideoURL: URL?
var body: some View {
VStack(spacing: 20) {
// 選択 UI
PhotosPicker(selection: $selectedItem,
matching: .any(of: [.images, .videos])) {
Text("画像・動画を選択")
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
// 選択した画像があれば表示
if let image = selectedImage {
Image(uiImage: image)
.resizable()
.scaledToFit()
.frame(height: 200)
}
// 選択した動画の URL を表示
if let url = selectedVideoURL {
Text("動画URL: \(url.lastPathComponent)")
.font(.caption)
}
// アップロードボタン
Button("アップロード") {
upload()
}
.padding()
.background(Color.green)
.foregroundColor(.white)
.cornerRadius(8)
}
.onChange(of: selectedItem) { newValue in
Task {
await loadSelectedItem()
}
}
.padding()
}
// 画像 / 動画を読み込む
func loadSelectedItem() async {
guard let item = selectedItem else { return }
// 画像読み込み
if let data = try? await item.loadTransferable(type: Data.self),
let image = UIImage(data: data) {
self.selectedImage = image
self.selectedVideoURL = nil
return
}
// 動画読み込み
if let url = try? await item.loadTransferable(type: URL.self) {
self.selectedVideoURL = url
self.selectedImage = nil
return
}
}
// アップロード処理
func upload() {
if let image = selectedImage {
print("📤 画像アップロード: \(image)")
}
if let url = selectedVideoURL {
print("📤 動画アップロード: \(url)")
}
}
}