coiai Logo
coiai

【SwiftUI】画像を追加する機能と、プレビュー、そして削除する機能

こんにちは!今日は、SwiftUIで画像を選択する機能を作りました。下の画像のような感じです。

コードの名前はSelectImage.swiftです。

コードの全体像

import SwiftUI
import UniformTypeIdentifiers

struct SelectImage: View {
    @Binding var image: NSImage?
    @State private var isHovering = false
    
    var body: some View {
        // ここに色々なコードが入ります
    }
}

まず、import SwiftUIimport UniformTypeIdentifiersで必要なライブラリをインポートします。次に、SelectImageという名前のViewを作ります。このViewには2つの変数があります。@Binding var image: NSImage?は選択した画像を保持し、@State private var isHovering = falseはマウスが画像の上にあるかどうかをチェックします。

画像を選ぶ部分

Button("Select Image") {
    let panel = NSOpenPanel()
    panel.allowedContentTypes = [UTType.image]
    panel.allowsMultipleSelection = false
    if panel.runModal() == .OK {
        let url = panel.url
        self.image = NSImage(contentsOf: url!)
    }
}

“Select Image”というボタンを作ります。このボタンをクリックすると、画像を選ぶダイアログが開きます。選んだ画像はNSImageとしてimage変数に保存されます。

画像を表示する部分

if let img = image {
    ZStack {
        Rectangle()
            .fill(Color.gray)
            .frame(width: 44, height: 44)
            .cornerRadius(4)
        Image(nsImage: img)
            .resizable()
            .scaledToFit()
            .frame(width: 40, height: 40)
    }
}

選んだ画像は、四角形の枠内に表示されます。画像は自動的に枠に合わせてリサイズされます。

画像を削除する部分

Button {
    self.image = nil
} label: {
    Image(systemName: "xmark.circle")
        .foregroundColor(.white)
        .font(.system(size: 16, weight: .bold))
}
.disabled(image == nil)
.padding(2)
.background(Color.black)
.clipShape(Circle())
.opacity(isHovering ? 0.9 : 0)
.onHover { hovering in
    isHovering = hovering
}

画像の上にマウスを持っていくと、削除ボタンが現れます。このボタンを押すと、選んだ画像が削除されます。

まとめ

以上が、私が作ったSelectImage.swiftの解説です。このコードを使えば、SwiftUIで簡単に画像選択機能を追加することができます。皆さんもぜひ試してみてください。それでは、また次回!

投稿日: 2023年12月18日
カテゴリ: SwiftUI
タグ:
coiai

coiai

この記事もおすすめ

この記事を書いた会社

株式会社coiaiは、「想像できることを美しく実現」を掲げ、XR・Web・アプリ・システム開発およびDX支援を行う会社です。 創業2022年、東京都練馬区に本社を置き、要件のヒアリングからPoC(概念実証)、本番運用まで一貫して伴走します。 まずはお気軽にご相談ください。

商号株式会社 coiai創業2022年1月設立2025年1月23日資本金1,500,000円(設立時点)本社所在地東京都練馬区関町北 3-6-9代表者代表取締役 竹村 啓佑 / 代表取締役 服部 陽良

主なご相談内容

会社概要・役員紹介を見る

詳しい会社情報は会社概要ページでご覧いただけます。

資料請求・無料相談

導入要件のヒアリングからPoC、本番運用まで伴走します。まずはお気軽にご相談ください。

お問い合わせの前に 個人情報保護方針 をご確認ください。