ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
SwiftUIにおけるSF Symbols
SF SymbolsをSwiftUI Appに組み込む方法を紹介します。シンボルの表示、サイズのカスタマイズ、さまざまなバリエーションを表示するための基本的なテクニックを探ります。また、シンボルの色付けに関する最新のアップデートについても説明し、Appのニーズに合ったツールを選択できるようにします。
リソース
関連ビデオ
WWDC21
-
ダウンロード
♪♪ どうもジェイコブです “SwiftUIにおけるSF Symbols”へ ようこそ このセッションでは いくつかトピックを紹介します まずSF SymbolsをSwiftUIで― 使用するための基本事項 次にシンボルのバリエーションを 使用する方法 最後に新しい レンダリングモードについて これらAPIについて ですが このセッションの内容は 全てのAppleプラットフォームで― 利用可能です 今年のリリースでも何か― 新しいものが見つかる ことでしょう まず基本的な部分から SwiftUIで SF Symbolsを すでに使用している場合 この部分は簡単です
まずシンボルの表示
画像の“ハート”のように システムが提供する― シンボルを使って みましょう ラベルビューは シンボルを表示する もう1つの主な方法です ラベルはタイトルと アイコンの組み合わせで ほとんどはシンボルです ラベルの優れたところは このペアリングの 一般的な説明であり コンテキストに動作を 適応させられること たとえば多くの コンポーネントでは ラベルはシンボルと タイトルとともに表示され 別のレイアウトでは シンボルまたは タイトルのみの― 場合もあります SwiftUIはこうした変更を 組み込みのビューで 自動的に行います 独自のビューで ラベルスタイルに 応じて変更することもできます 使用する イニシャライザの変更だけで 画像とラベルの両方に カスタムシンボルを表示できます これは各構成要素の 表示例ですが 重要なのは 表示だけではありません 各ビューはこのように デフォルトで VoiceOverに表示されます ラベルを使用すれば アクセシビリティ サポートを自動提供します タイトルはコンテンツの テキストによる― 説明だからです 画像のみの場合を 見てみましょう 可能な限りSwiftUIは システムシンボルの― コンテンツに基づいて ラベルを提供します ハートを“いいね”ボタンに― 使う場合は"ハート"で十分ですが 一部のシンボルには 標準的な意味がなく デフォルトの― アクセシビリティの説明では 有用性が低くなります Appがシンボルを どのように使用しているか 情報を追加したい場合 いつでも accessibilityLabelで その情報を提供できます カスタムシンボルで 理想的な― アクセシビリティの記述が ないケースにも対応できます 改善案としては 画像の名前のローカライゼーションを Localizable.stringsファイルで 提供します SwiftUIは自動的に アクセシビリティラベルとして ローカライズした 文字列を使用します
最後に テキストの中で シンボルを使用することも可能です 文字列の置き換えにより 一連のテキスト内に シンボルを埋め込めます これはシェブロンのように テキストと一緒に シンボルをリフローさせたい 場合に最適です
ハートのラベルに戻り シンボルのカスタマイズに 適用できる 修飾子のいくつかを 見てみます まずforegroundStyleにより シンボルの色を変更 テキスト色はライトモード― ダークモードで黒か白です foregroundStyleを 赤などの特定の色― あるいは別スタイルなど セマンティックな値に 設定可能です foregroundStyleに ついては後ほど その高度な機能を 見ていきます
font修飾子を 使用してテキストサイズと シンボルのサイズを変更します bodyやcaptionなどの スタイルを使用すれば テキストは動的に スケーリングされ 固定サイズ指定では 一定に保たれます
シンボルのサイズを 変更するには imageScaleを使用します これによりフォント サイズを変更せずに テキストに対して相対的に シンボルがスケールできます
次にバリエーションを見てみます iOSのタブバーでは 塗りつぶし fill のシンボルを 通常は使用します ここは手作業が 必要な項目でした SF Symbols appで シンボルを探しても sparklesのように 塗りつぶしが― 用意されていない場合などです 今年のタブバーとビューは 特定のバリエーションを 自動的にオプトインし フィルなどを すべての シンボルに適用します これはシンボル名の ベースのみを指定することで 余計な作業なしでバリエーションが 取得されることを意味します 不必要に過剰に 設定しないことで― コードがより再利用可能 となります 同じコードを macOSで実行すると 正しいバリエーションである アウトラインを取得します
このバリエーションサポートは 独自のコンポーネントでも使えます デフォルトの アウトラインのバリエーションで― 提示されているラベルの リストがあります フィルバージョンを使用するには symbolVariant修飾子を 使います この修飾子でバリエーションを 中括弧に設定し ビュー階層全体で 使用したのが こちらの例です 大規模なバリエーションの セットを用意しました 塗りつぶし 取り消し 囲みの形状 などです .circle.fillのようなシンボルの 名称と同様に これらを組み合わせて 使えます
同じバリエーションのセットは カスタムシンボルでも機能します 必要な作業はシステム シンボルが使用する 命名パターンに従うことだけ 次にレンダリング モードです シンボルは4つの レンダリングモードをサポートします 色付け方法の カスタマイズを提供します 各レンダリングモードの 例を次に示します 1つずつ確認しましょう レンダリングモードの設計に― 関する詳細な情報については “SF Symbolsの新機能”を お勧めします
ではカードリストに 戻りましょう 今度はmacOSです 現在シンボルは デフォルトのモードである― モノクロになっています これはシンボルを 一貫した色で表示― するのに適しています ただしこの場合 シンボルの表示には 各カードに関連付けられた 色を使用したい マルチカラーモードは 各シンボルが表す色を― 表示する優れた方法です symbolRenderingMode 修飾子で multicolorを指定します シンボルに多色表現が ない場合 モノクロモードに フォールバックします SF Symbols Appを使用して どのシンボルが多色定義 されているか調べられます またカスタムのシンボルに マルチカラーを追加することもできます 詳細については こちらをご覧ください “SF Symbols 3 Appの詳細” このAppの別の箇所には カードをデッキにシャッフルする いくつかのボタンが あります 透明度のレベルの違いで シンボルの― 重要箇所を強調したいと 思います どのレンダリング モードだったでしょう? そうです 階層です 同じ修飾子 symbolRenderingModeで hierarchicalを使用できます これは現在のフォアグラウンドの スタイルで モノクロのように 単色を適用するだけでなく 複数のレベルの透明度を 追加して シンボルの要素を 強調します レンダリングモードには もう一つあります ここにAppに役立ちそうな ボタンがあります カードゲームでの 間違いを 元に戻すには このボタンを使います ここでは.circle.fillバージョンを 使用して ボタンにシンボルを表示 円形の背景を取得します でも色がちょっと 違う感じ カードの色に合った ものが欲しい foregroundStyle 修飾子を使用して シンボルに着色 さらに先に進めます 今年の新機能では シンボルの描画に― 複数の色を設定可能 これは最大限の制御を 可能にするパレットモードを シンボルのレイヤーに 適用します 最大3つのスタイルを指定して シンボルの各レベルを制御します このシンボルにはprimaryと tertiaryのコンテントを持っており よって1番目と3番目の 色が適用されます このシンボルのアウトライン のように primaryとsecondaryだけの シンボルの場合 それらの色のみが 使用されます ほとんどのシンボルは 2つのレイヤーしか 使用しないため secondary以降は 3つではなく2つの― スタイルを指定して 最後のスタイルを 設定します 多くの場合必要なのは これだけです これまでの色の指定は foregroundStyle修飾子であり 任意の ShapeStyleで機能するもの でした secondaryスタイルを 使用して ぼかし効果を 表示したり マテリアルを使用して シンボル背後の 背景をぼかすことも可能です フォアグラウンドのスタイルと マテリアルに関する情報は “SwiftUI Appへのリッチな グラフィックスの追加”をどうぞ レンダリングモード セットをおさらいします
レンダリングモードで 最良の方法は SF Symbols Appと そのインスペクターです これらのAPIを表現する SwiftUIの設定は SF Symbols appとコードの間で 同じように機能するため 簡単に行き来できます また最小限の設定で 最良の動作が得られます 前景スタイルが1つだけで レンダリングモードを指定 しない場合は 自動的にモノクロになります 複数の前景スタイルに レンダリングモードが 未指定の場合は 自動的にパレットを選びます
SF Symbols appには これらのさまざまなモードで 使用できる色のセットが 多数あります SwiftUIで利用できる 色のセットには 新色とスタイルを含む 新しいものを用意しました カラーは設定ごとに ライトモードや ダークモードに ぼかしなどの― 特定の プラットフォームにも 最適化されています シンボルの作成方法を 見てきましたが 内容は外観を変更する ための一連の修飾子 表示されるシンボルの バリエーションを変更する方法 レンダリングモードの 選択方法 前景スタイルを使用して シンボルをカスタマイズ する方法などでした SF SymbolsでAppに グラフィックを簡単に追加 必要に応じて カスタマイズも可能です Appを改善するために ご活用ください ご清聴ありがとう ございました [アップビートな音楽]
-
-
0:45 - Creating Symbols
// System symbol image Image(systemName: "heart") // System symbol label Label("Heart", systemImage: "heart") // Custom symbol image Image("queen.heart") // Custom symbol label Label("Queen of Hearts", image: "queen.heart")
-
2:33 - Accessibility Label
Image(systemName: "heart") .accessibilityLabel("Ace of Hearts") Image(systemName: "person.circle") .accessibilityLabel("Profile") Image("queen.heart") // Localizeable.strings "queen.heart" = "Queen of Hearts";
-
2:59 - Symbol in Text
Text(""" Thalia, Paul, and 3 others \(Image(systemName: "chevron.forward")) """)
-
3:14 - Customizing Color
Label("Heart", systemImage: "heart") Label("Heart", systemImage: "heart") .foregroundStyle(.red) Label("Heart", systemImage: "heart") .foregroundStyle(.tint) Label("Heart", systemImage: "heart") .foregroundStyle(.secondary)
-
3:51 - Customizing Font
Label("Heart", systemImage: "heart") .font(.body) Label("Heart", systemImage: "heart") .font(.caption) Label("Heart", systemImage: "heart") .font(.system(size: 10))
-
4:08 - Customizing Scale
Label("Heart", systemImage: "heart") .imageScale(.large) Label("Heart", systemImage: "heart") .imageScale(.medium) Label("Heart", systemImage: "heart") .imageScale(.small)
-
4:23 - Customizing Variants
TabView { Text("Cards").tabItem { Label("Cards", systemImage: "rectangle.portrait.on.rectangle.portrait") } Text("Rules").tabItem { Label("Rules", systemImage: "character.book.closed") } Text("Profile").tabItem { Label("Profile", systemImage: "person.circle") } Text("Magic").tabItem { Label("Magic", systemImage: "sparkles") } }
-
5:12 - Monochrome
List { Label("Ace of Hearts", systemImage: "suit.heart") Label("Ace of Spades", systemImage: "suit.spade") Label("Ace of Diamonds", systemImage: "suit.diamond") Label("Ace of Clubs", systemImage: "suit.club") Label("Queen of Hearts", image: "queen.heart") } .symbolVariant(.fill)
-
6:41 - Multicolor
List { Label("Ace of Hearts", systemImage: "suit.heart") Label("Ace of Spades", systemImage: "suit.spade") Label("Ace of Diamonds", systemImage: "suit.diamond") Label("Ace of Clubs", systemImage: "suit.club") Label("Queen of Hearts", image: "queen.heart") } .symbolVariant(.fill) .symbolRenderingMode(.multicolor)
-
7:10 - Hierarchical Rendering Mode
HStack { Button(action: {}) { Image(systemName: "square.3.stack.3d.top.fill") } Button(action: {}) { Image(systemName: "square.3.stack.3d.bottom.fill") } } .symbolRenderingMode(.hierarchical)
-
7:50 - Palette Rendering Mode
Button(action: {}) { Image(systemName: "arrow.uturn.backward") } .symbolVariant(.circle.fill) .foregroundStyle(.white, .yellow, .red)
-
9:00 - Advanced Foreground Styles
Button(action: {}) { Image(systemName: "arrow.uturn.backward") } .symbolVariant(.circle.fill) .foregroundStyle(.white, .red) Button(action: {}) { Image(systemName: "arrow.uturn.backward") } .symbolVariant(.circle.fill) .foregroundStyle(.white, .secondary) Button(action: {}) { Image(systemName: "arrow.uturn.backward") } .symbolVariant(.circle.fill) .foregroundStyle(.red, .regularMaterial)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。