ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
テキストとテキストインタラクションに関する最新情報
テキストは、間違いなくすべてのアプリに重要な構成要素です。Appleプラットフォームでリッチテキスト体験を作成するための最新の機能や強化について学びましょう。一般的なテキスト要素を活用し、皆さんのアプリ向けの完全にカスタマイズされたインタラクションを作成する方法をご紹介します。ディクテーション、テキスト拡大、テキスト選択のアップデートについて学び、テキストクリッピング、ラインラッピング、ハイフネーションの改善に関する詳細を説明します。
関連する章
- 0:56 - Changes in selection UI
- 4:16 - Text item actions and menus
- 6:46 - Lists and bullets
- 7:37 - Dictation
- 11:08 - Internationalization
リソース
- Adopting system selection UI in custom text views
- Adopting the system text cursor in custom text views
関連ビデオ
WWDC23
-
ダウンロード
♪ ♪
こんにちは UIKitの James Magahernです テキストとテキスト操作の 最新情報をお伝えします テキストはすべてのアプリケーションで 重要な役割を果たします 情報を取得し 伝達するための 主要な方法です 現在 ゼロから始める場合でも 高度な抽象化からでも アプリで強力な テキスト体験を作成するための より多くのツールが 提供されるようになりました これからテキスト体験の作成から テキストをアプリを活用する方法まで さまざまな改善を説明していきます これにはシステム選択UIへの変更の一部 UITextViewsへのテキスト アイテムアクションとメニューの追加 TextKit 2のリストと箇条書き macOSのディクテーションUI 国際化に関する重要なアップデートが 含まれます ではまず 選択UIへの変更から始めましょう すべてのプラットフォームにおいて テキストカーソルが完全に新しくなりました
入力言語を変更した際に インライン インタラクティブ スイッチャーが表示されるようになります 範囲を選択する際には より人間工学的な 選択ハンドルが表示されます またルーペが完全に新しくなり 大サイズのテキストに カーソルを置くのが容易になりました アプリがUITextViews またはUITextFieldsを使用する場合は この新しいUIが自動的に利用可能になります また UITextInteractionの クライアントも 新しい選択UIを使用できます テキスト表示に高度にカスタマイズされた UIを使用している場合は 特に UITextInteractionを 使用できない場合は 独自の実装でこれらの変更に 対応するのは困難かもしれません そのためiOS 17ではUITextSelection DisplayInteractionを追加しました これはUITextInteractionに含まれる 動作を必要とせず 選択UIのみを提供します UITextSelectionDisplayInteractionは 新しいタイプのUIInteractionで どのUIViewにもインストールできます また 操作のさまざまなメソッドを定義し ビューからセレクション状態を取得する UITextInputプロトコルを実装する オブジェクトを提供する必要もあります その後 UITextSelectionDisplay Interactionはすべての動作を行い カーソルビューとカーソルアクセサリ 範囲ハイライトと選択ハンドルを提供します これらのビューは すべて置き換えることができ 必要に応じて動作をカスタマイズできます これをコードで行う方法の例を 見てみましょう まず 選択表示の操作を作成し UITextInputプロトコルを実装する ドキュメントオブジェクトと共に提供します 該当する場合 これは同じビューになります 次は内に表示したい選択UIのビューに 操作を追加します これはコンテナビューや ドキュメントを レンダリングするビューです 選択状態が変更した場合は 操作で setNeedsSelectionUpdateを呼び出すと 操作は 新しい選択状態に反映するよう すべてのビューをアップデートします UITextSelectionDisplayInteractionに 加え ルーペを表示する新しいAPIを追加しました これはどのビューにも使用でき UITextSelectionDisplayInteractionや UITextInputは必要ありません UIPanGestureRecognizerなど ジェスチャ認識に 使用してルーペのアップデートを 推進することが推奨されています ルーペセッションをコードで管理する方法を お見せしましょう コールバックでパンジェスチャ認識を 使用する場合 ジェスチャの場所と 選択ウィジェットを取得します この場合はカーソルビューです 次に ジェスチャが開始された場合 begin(at:)を呼び出して 新しい UITextLoupeSessionを作成し ルーペの開始場所 選択ウィジェット 座標空間を提供します ジェスチャが動いたら 既存のルーペセッションで move(to:)を呼び出し場所を更新します 最後に ジェスチャ認識が終了したら ルーペセッションで無効を呼び出し ジェスチャ認識を却下します 次はテキストアイテムアクションと それを使用してテキストビュー内に メニューを表示する方法を説明します UITextViewのテキストアイテム 操作は UITextViewDelegateで 新しいAPIを使用することで カスタマイゼーションが充実しました
これらの新機能により テキストアイテムの 主要なアクションの変更や この翻訳アプリの候補メニューのような メニューを提示できるようになりました 以前 デベロッパーはUITextViewを使用して リンクや添付ファイルのアイテムの操作を 無効にできました iOS 17では テキストビューのテキストアイテムの アイテム操作を カスタマイズできるようになりました UITextViewDelegateは 両方の主要なアクションのカスタマイズ または特定のテキストアイテムのメニューを 提供するための新しいメソッドを得ました ではテキストアイテムは 実際にどういうもので アプリとどのように統合するかを 説明しましょう
テキストアイテムはアイテム 操作に対応する内容を表します これには NSTextAttachmentにより 表わされるテキスト添付ファイルと NSLinkAttributeNameにより 表されるリンクが含まれます UITextItemはテキストのカスタム範囲の タグ付けをサポートするようにもなりました 操作の範囲をタグ付けするには 操作可能にしたい テキストの範囲を表す属性付き文字列で UITextItemTagAttributeNameを 使用します これらの新しいAPIにより テキストアイテムが操作された場合に デフォルトのタップやメニュー動作を 変更できるようになりました たとえば 既知のリンクをアプリ内の 既存のビューにリダイレクトしたり テキストの一部にカスタムメニューを 追加したりできます 主要なアクションまたはメニューを 抑制または無効にする場合 menuConfigurationまたは primaryActionデリゲートメソッドで nilを返すだけです こちらはユーザーがUITextView内で リンクをタップした際に メニューを表示するための 簡単なコードの例です menuConfigurationFor: defaultMenu:methodを UITextViewDelegateから実装し 表示したいメニューを含んだ メニュー構成を返すだけです メニュー構成の一部として プレビューを提供し 残りのコンテキストメニューと一緒に インラインを表示することもできます TextKit 2にはリストと箇条書きの サポートも追加されました アプリでこれを活用する方法を 説明しましょう 複数の異なる箇条書きアイテムの サポートに加え ローマ数字 英字 少数点付き順位も サポートされるようになりました デバイスまたはアプリが構成された ロケールに基づき それぞれが自動的にローカライズされる 世界的な国際化が組み込まれています こちらは属性付き文字列を使用して テキストリストを開始する 簡単な例です NSParagraphStyleで textListsプロパティを使用し どのパラグラフに順序付きリストが 適用されるかを定義します システムはnewlinesなど 行を終了する文字の基づいて 自動的にアイテムに番号を付け UITextViewは型属性に基づいて パラグラフスタイルを 自動的に伝搬します macOS Sonomaのディクテーションの 機能に大きな変更が加えられました 皆さんのカスタムテキスト要素が 新しいデザインでうまく機能するように 新しいAPIをいくつか追加しました 新しいディクテーションインジケータは macOS 14でこのように動作します iOSのように ディクテーションは 話す間グロー効果が機能し 停止中にはマイクインジケータが 表示されます
スクロールするとカーソルの横の インジケータは スクロールビューの端にとどまり ドキュメントの現在に位置に 戻るためのボタンを提供します AppKitでNSTextViewのような標準の テキストコントロールを使用している場合 この動作をすぐに使用できます アプリが挿入ポイントを表示するための カスタマイズされた実装を提供する場合は この動作をサポートするために 少し作業を行う必要があります iOSのUITextSelection DisplayInteractionと同様に システムの選択UIと 一貫性を保つことを可能にする macOSの新しいAPIが追加されました 独自のカーソルを描く代わりに ドキュメントのビュー内に配置して カーソルの位置を示すことができる カスタマイズ可能なNSViewサブクラス NSTextInsertionIndicatorを使用します この外観はカスタマイズできます 色とサイズも変更可能です デフォルトでは 現在のアクセントカラーに従います これによりディクテーション効果の サポートが非常に簡単になります システムが適切なビューを 階層に挿入することを 可能にするために少し構成が必要になります macOSでNSTextInsertionIndicatorを 使用する方法です NSTextInsertionIndicatorを作成し ドキュメントの内容を 表示しているものの サブビューとして追加します それが完了したら effectsViewInserterを設定し システムが提供したビューをドキュメントの ビュー階層に挿入するのを防止します システムは自動的に効果ビューの配置を行い 挿入インジケータが移動するたびに 更新されるのを確実にします カスタムテキストビューが レスポンダステータスを放棄した場合 displayModeを非表示に設定して カーソルを非表示にしてください
ディクテーションが入力ソースとして 使用される場合 テキストが挿入されると フレームへの更新は 自動的にグロー効果で行われます グロー効果を無効にする必要がある場合は automaticModeOptionsから showEffectsViewオプションを削除します ユーザーが入力モードを変更した場合 効果ビューがカーソルの下に 横並びに表示され 言語選択UIを表示します このUIの配置を オーバーライドする必要がある場合は NSTextInputClientの実装で preferredTextAccessoryPlacementを 指定できます システムはこのプロパティの値を確認し アクセサリを引き出す場所を決定します ディクテーション中にテキストカーソルが オフスクリーンまでスクロールされた場合 scroll-away インジケータを表示して カーソルの相対位置を示し ディクテーションの場所に戻るための アフォーダンスを提供します
この動作がカスタムテキストビューで サポートされるように NSTextInputClientを使用し selectionRectとdocumentVisibleRect プロパティを実装してください textInputClientWillStart ScrollingOrZoomingと willEndScrollingOrZoomingを呼び出し システムにスクロールの開始点と終了点を 通知します 優れたテキスト体験を提供するためには アプリがすべての言語で機能することを 確実にすることが重要です そこで標準テキストコントロールに 重要な変更を加え 広範囲の言語にわたり 可読性と人間工学を強化しました アプリの動的タイプのサポートは すべての言語における UIのレイアウト改善に役立ちます アプリにテキスト要素を 展開する際に考慮すべき点は 言語によってレイアウトの指示と フォントのスタイルに加え 行の高さが異なる点です 言語間の異なる行の高さに対応する際の 一般的な問題は クリッピングされたテキストです 見た目が悪くなるだけでなく 可読性に大きな影響を与え アプリの全体的なユーザー体験の 大きな妨げとなります アプリをすべての言語でテストできない場合 このような問題に 気づきにくい場合があります そこでUITextFieldやUILabelなど 標準テキスト要素を改善し ほとんどのケースでこれらの問題に 自動的に対処できるようにしました しかし これらの要素がシステムにより クリッピングされないように 継続して従うべき ベストプラクティスがあります これらの一般的なクリッピングの 問題を回避するために すべてのプラットフォームは UILabelまたはUITextFieldで 行の高さを自動的に調整し 高度に動的な行の高さで 各言語に対応します この新しい動作は特定のケースのみで 機能します まず 行の高さは デバイスが構成した優先言語に 依存するようになったことに 留意してください 第二に この調整はUI全体に影響を及ぼし すべてのテキスト要素の行の高さを 拡大します これには 英語のような 通常余分なスペースを必要としない 固定された高さでスクリプトを 表示するものも含まれます これはすべてのテキスト要素で 一貫性を保つために意図的に 行われたものです 最後にこの自動調整は テキストスタイルを使用する テキスト要素のみに適用されます カスタムフォントは引き続き 独自の固定された行の高さを使用します この動作はいくつかのリリースで 導入されており 完全に新しいものではありません しかし iOS 17ではより動的で 完全な調整はテキストスタイルと 使用する言語により異なります
この動作を活用するには preferredFont(forTextStyle:)メソッドで 明示的にUIFontを作成し TextStyleを使用し UILabelのようなテキスト要素に割当てます 次に テキスト要素での clipsToBoundsの設定を回避します タイ語やヒンディー語などの言語の アセンダーやディセンダ―は 行の高さの境界から突き出ることがあります これは大抵の場合 付近の要素に 余分なスペースがあるので ほとんどのレイアウトでは 許可されていますが clipsToBoundsを設定すると これらのテキスト要素は クリッピングされてしまいます この設定の不必要な使用を避けるために 以前はデフォルトで有効になっていた UIKitもアップデートされています 最後に UIが高さの変更に対応し その他すべてのコントロールが 整列するよう テキスト要素が縦に伸びるようになりました 改行の動作も中国語 ドイツ語 日本語 韓国語に対して 多大に強化されました これらの改善はUIで使用する テキストスタイルの種類と 表示される言語により 異なるルールが適用されます たとえば以前 韓国語のテキスト内の言葉は 行間で分割されることがありました 現在 UIKitはタイトルテキストスタイルで このような分割を防ぎ よりシームレスな閲覧体験を提供します アプリでこの新しい動作を活用するには ここでもテキストスタイルを使用します iOS 17で強力なテキスト体験を 作成するための 説明は以上です
アプリでカスタムテキストビューを 使用している場合は システム選択UIを使用して OSのすべての新しい機能を利用してください テキストアイテムを使用して テキストビューのリンクを より上手に操作します TextKit 2の新しい機能を活用し より充実したテキスト編集体験を 提供しましょう そして一般的なテキスト要素に テキストスタイルを使用し 言語や優先するテキストサイズに関係なく すべてのユーザーにすばらしい体験を 提供しましょう 以上です ご視聴ありがとうございます 5つ星の評価をつけて 下部にコメントを残してください ♪ ♪
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。