SwiftUI EditButton 編集モードに切り替えるボタン

EditButton SwiftUI

SwiftUIでのEditButtonは、Viewの.editModeBinding<EditMode>)を切り替えるためのボタンです。下記はシンプルな実装方法です。

struct EditButtonTest: View {
    var body: some View {
        EditButton()
    }
}

上記のように書くとiOSの画面ど真ん中に[Edit]というボタンが配置されています。実行し[Edit]ボタンをタップすると[Done]に切り替わります。

[Edit|Done]の切り替えを確認する場合、下記のような@Environmentを宣言します。

@Environment(\.editMode) var mode

切り替えを確認する場合上記のmode?.wrappedValueが[.inactive|.transient|.active]で判断できます。

下のようにテキストフィールドを配置し、EditをタップするとTextFieldに書き込みができるように実装してみます。

struct EditButtonTest: View {
    @Environment(\.editMode) var mode
    @State var edit1: String = "ダミー"
    var body: some View {
        VStack{
            HStack{
                Spacer()
                EditButton()
            }
            HStack{
                Text("名前")
                    .padding(.all, 4.0)
                if self.mode?.wrappedValue == .inactive {
                    TextField("Name",text: $edit1).padding(.all, 4.0).disabled(true)
                }
                else {
                    TextField("Name", text: $edit1)
                        .padding(.all, 4.0).border(Color.gray, width: 2)
                    Button(action: {
                        self.edit1 = ""
                    }){
                        Image(systemName: "nosign")
                            .foregroundColor(.red)
                    }
                        
                }
                Spacer()
            }
            
            Spacer()
        }
        .padding(.horizontal)
    }
}

実行すると下のような挙動です。

EditButton SwiftUI

SwiftUI Image(systemName:アイコン文字列) について

SwiftUI のImage()でシステムのシンボルアイコンを入れる場合下記のように文字列を指定します。

Image(systemName: "nosign").foregroundColor(.red)

systemNameで“nosign”を指定しました実行すると下のようなアイコンが表示されます。

このsystemNameにウサギのアイコンを入れたい場合“hare.fill”と入れます

それ以外どのようなシンボルアイコンがあるのかネットなどで検索してもなかなか出てこない

https://developer.apple.com/design/human-interface-guidelines/sf-symbols/overview/

上記URLを見る感じでは、このアイコンは「SF Symbols」というらしい。URL内の「Symbols for Use As-Is」と書いている部分にいくつかのシンボルの文字列が書いている。

https://developer.apple.com/design/resources/

上記URLに「Download SF Symbols 2 beta」と書いているのでダウンロードする。

SF-Symbols-2.dmgを解凍してインストールし下のようなアイコンのアプリを起動する

起動すると下のような画面が表示されそこにシンボルの文字列が書いています。

WebP⇔[PNG, JPEG]変換方法

WebPとはGoogleが開発した静止画フォーマットです。URLは下記です。

https://developers.google.com/speed/webp

WebPへ変換してくれるWebサービスサイトなどありますが WebP Converterが公式サイトからダウンロードできますのでそのアプリを利用したほうがいいかと思います。

macOSの場合 WebP Converterインストール

macOS用のパッケージ管理ツールhomebrewを使えば下記コマンドで簡単にインストールできます。

brew install webp

cwebp, cwebpがインストールされていると思いますので確認します。

cwebp -version
dwebp -version

cwebpコマンドを使ってwebpファイルに変換する。

cwebp 202007131405.png -o 202007131405.webp

上のような感じで変換できました。

WebPファイルを他のフォーマットへ変換する場合「dwebp」コマンドを使います。

dwebp 202007131410.webp -o test.png 

PNGフォーマットファイルに変換されます。

Windows版のWebP Converterインストール方法

https://developers.google.com/speed/webp

WebP公式サイトから[WebP Converter Download]項目まで下にスクロールする。

Convert your favorite collection from PNG and JPEG to WebP by downloading the precompiled cwebp conversion tool for Linux, Windows or Mac OS X.

と書いているとことにリンクがあるのでクリックします。

さらに、[downloads repository.]と書いている項目をクリックするとバイナリ一覧が出てきます。

上記あたりをZIPファイルをダウンロードし解凍すればbinフォルダー内に[cwebp.exe, dwebp.exe]が入っています。

macOSで実行したコマンドでWebPに変換できます。

cwebp.exe 202007131410.png -o 202007131410.webp  

WebPファイルからPNGファイルに変換

dwebp.exe 202007131410.webp -o test.png