ドラッグアンドドロップ
ドラッグアンドドロップを使用すると、テキスト、ファイル、イメージなどの ソースコンテンツ を選択し、ある場所 (ソースコンテナ) から別の場所 (宛先コンテナ) にドラッグして、コンテンツを移動または複製できます。ほとんどの macOS アプリは、ユーザのニーズとアプリ固有の機能に基づいて、ある程度のドラッグアンドドロップ機能を実装しています。例えば:
あなたのアプリでは、テキストビューなどの単一のコンテナ内、2 つのテキストフィールドやウィンドウなどのコンテナ間、Mail や Finder などの他のアプリにもでドラッグアンドドロップを有効にできます。
開発者向けガイダンスについては、ドラッグアンドドロッププログラミングトピックス (Drag and Drop Programming Topics) を参照してください。
ドラッグアンドドロップのサポート
一般に、あなたのアプリにドラッグアンドドロップのサポートを実装して下さい。 ドラッグアンドドロップは、システム全体を通してコンテンツを移動およびコピーするための効率的で直感的な方法です。没入型ゲームなど、あなたのアプリで本当に役に立たない場合を除いて、付加価値のある場所であればどこでもドラッグアンドドロップをサポートするように努めてください。あなたのアプリでテキスト、イメージ、またはファイルを操作する場合は、ドラッグアンドドロップ機能を利用できます。
ドラッグアンドドロップのタスクを実行するための代替方法を提供して下さい。 支援技術を使用している場合など、一部の人にとってはドラッグアンドドロップ操作を実行するのが難しい場合があります。Finder と Mail は、ドラッグアンドドロップの代替手段を提供するアプリの例です。これらには、宛先間でアイテムをコピーおよび移動するために使用できるメニュー項目が含まれています。
ドラッグアンドドロップ操作で移動するかコピーするかを決定します。 一般に、移動は通常、同じアプリ、ドキュメント (同じドキュメントを表示する 2 つのウィンドウ間をドラッグする場合でも)、ディスクなど、ソースコンテナと宛先コンテナが同じである場合に意味があります。コピーは通常、2 つの異なるアプリ、ドキュメント、ディスクなど、ソースコンテナと宛先コンテナが異なる場合に意味があります。たとえば、Mail メッセージを Finder デスクトップにドラッグすると、メッセージはファイルとしてデスクトップにコピーされます。Mail メッセージをメールボックスにドラッグすると、メッセージは現在の場所から新しいメールボックスに移動されます。
可能であれば、ドラッグアンドドロップ操作を元に戻せるようにします。 場合によっては、ユーザが誤ってコンテンツを間違った宛先にドラッグすることがあります。これが発生した場合、ユーザは理想的には undo を使用してコンテンツを以前の場所に復元できる必要があります。
ドラッグへの応答
可能であれば、人々が 1 つのステップでコンテンツを選択してドラッグできるようにします。 たとえば、Finder では、ファイルをクリックしてすぐに新しい宛先へのドラッグを開始できます。複数のファイルをドラッグする場合を除いて、個別に選択して一時停止してからドラッグを開始する必要はありません。
アクティブでないウィンドウで選択したコンテンツを人々がドラッグできるようにします。 アクティブでないウィンドウで選択されたコンテンツは バックグラウンド選択 と呼ばれ、アクティブなウィンドウで選択されたコンテンツとは外観が異なります。一般に人々は、特にテキスト、イメージ、ファイルなどのコンテンツの範囲である場合は特に、バックグラウンド選択をアクティブなウィンドウにドラッグできることを期待しています。たとえば、TextEdit では、アクティブでないドキュメントを前面に表示せずに、選択したテキストをアクティブでないドキュメントからアクティブなドキュメントにドラッグできます。このようなアクションをサポートするには、ウィンドウがアクティブでなくなったときにユーザの選択を維持しなければなりません。
可能であれば、背景の選択に影響を与えることなく、人々がアクティブでないウィンドウで個々のアイテムをクリックしてドラッグできるようにします。 たとえば、アプリの使用中に、背景の Finder ウィンドウで個々のファイルをクリックして、以前に選択したファイルの選択を解除せずに、新しい場所にドラッグできます。
ドラッグ中にフィードバックを提供
コンテンツが少なくとも 3 ポイントの距離だけドラッグされるとすぐに、ポインタの下にドラッグイメージを表示します。 ドラッグイメージは、ドラッグされているコンテンツの半透明の表現です。この外観はコンテキストを提供し、ドラッグが進行中であることを示し、ユーザがドラッグされたコンテンツの下にある宛先を確認できるようにします。ドラッグイメージは、ユーザがコンテンツをドロップするまで表示されます。
多項目のドラッグイメージとバッジ
拡大したドラッグイメージ
多項目をドラッグするときに、多項目のドラッグイメージを表示します。 ユーザが多項目を選択してドラッグする場合、ドラッグイメージは個々の項目を表す、積み重ねられたイメージで構成されています。関連するガイダンスについては、多項目のドラッグイメージ を参照してください。
多項目のドラッグ中に項目のカウントバッジを表示します。 バッジは、ドラッグされている項目の数を示す白い数字を含む小さな赤い楕円としてポインタの下に表示されます。必要に応じてバッジ数を更新します。宛先がドラッグされた項目のサブセットのみを受け入れる場合は、バッジ数を変更して、受け入れられる項目の数を示します。
わかりやすくする場合は、コンテンツを宛先にドラッグするときにドラッグイメージを変更します。 たとえば、写真を TextEdit ドキュメントにドラッグすると、写真が展開され、ユーザが写真をドキュメントにドロップした場合の外観が表示されます。この動作により、ユーザはドラッグアンドドロップ操作の結果をコミットする前にプレビューできます。ドラッグイメージを変更すると貴重なフィードバックが得られますが、ドラッグイメージの形が絶えず根本的に変化するような、気が散るような体験をさせることは避けてください。
移動ポインタ
コピーポインタ
コンテンツがドロップされたときに何が起こるかを示すポインタを表示します。 たとえば、新しいアイコンをツールバーにドラッグすると、コピー ポインタが表示されます。有用な宛先フィードバックを提供する他のポインタには、ドラッグリンク、項目の非表示、および 許可されていない操作 が含まれます。ポインタ を参照してください。
ドロップできない場合を明確に示します。 ドラッグ中、ユーザはコンテンツをドロップできる場合とできない場合を知っておく必要があります。一部のアプリは、ドロップが可能な場合にのみ挿入ポイント、ハイライト、または受け入れポインタバッジを表示することでこれを伝達します。つまり、視覚的なフィードバックがないことは、ドロップが不可能な場合を示します。他のアプリは、スラッシュ付きの円など、明示的に 許可されていない バッジを表示します。
コンテンツがその上にドラッグされたら、新しい宛先を強調表示します。 宛先が複数ある場合は、一度に 1 つずつ強調表示します。ソースコンテナと宛先コンテナが同じ場合、強調表示は不要です。たとえば、Finder で、ドキュメントアイコンを同じフォルダウィンドウ内の別の場所に移動しても、混乱が生じる可能性があるため、フォルダウィンドウは強調表示されません。場合によっては、コンテンツがコンテナから完全にドラッグされてから再入力されると、強調表示が発生することがあります。コンテンツが宛先の上に配置されなくなったら、強調表示を削除する必要があります。
垂直挿入インジケータ
水平挿入インジケータ
テキストでは、垂直挿入インジケータを使用して、ドラッグしたコンテンツがドロップされたときに表示される場所を示します。 挿入インジケータはポインタとは別に、ドラッグが有効かどうか、およびドラッグが移動またはコピーとして解釈されるかどうかをユーザに示します。
表では、水平挿入インジケータと強調表示を使用して、ドロップしたときにもコンテンツが存在する場所を示します。 たとえば、Finder ウィンドウのサイドバーには、既存のサイドバー項目間でコンテンツをドラッグすると、水平挿入インジケータが表示されます。サイドバー内のフォルダとディスクも、コンテンツをドラッグすると強調表示され、ドロップされたコンテンツがそれらに移動またはコピーされることを示します。
必要に応じて、宛先を自動的にスクロールします。 コンテンツが宛先の境界の外にドラッグされた場合、あなたのアプリは、宛先のコンテンツをスクロールするか、ユーザがまったく別の宛先にドラッグし続けるかを決定しなければなりません。あなたのアプリでユーザがドラッグを続行できる場合は、ドラッグした項目がその上に配置されたときに自動スクロールが発生する領域を定義することを検討してください。たとえば、コンテンツがウィンドウの本体領域の上部または下部にドラッグされると、Finder ウィンドウは自動的にスクロールします。自動スクロールは、アクティブなウィンドウでのみ発生する必要があります。ユーザがアクティブでないウィンドウで自動スクロールを開始しようとした場合は、ウィンドウを前面に移動します。
ドロップされたデータの受け入れ
ドロップ時に Option キーを確認してください。 ユーザは、ドラッグ中に Option キーを押すことにより、同じコンテナー内のドラッグアンドドロップ操作を強制的にコピーのように動作させることができます。この動作により、ユーザはドラッグの過程で移動またはコピーの決定を柔軟に行うことができます。同じコンテナにコンテンツをドロップする前にユーザが Option キーを押すのをやめると、コピーではなく移動が発生します。一般に、2 つの異なるコンテナ間をドラッグすると、常にコピーが生成されます。
ドロップが失敗した場合は、期待されるアニメーションを使用してください。 ユーザが項目を無効な宛先にドロップした場合、またはドロップが失敗した場合、項目はポインタの位置から元の位置にズームして戻る必要があります。この動作は ズームバック と呼ばれます。
元に戻せないドラッグアンドドロップ操作を完了する前に、確認を求めてください。 たとえば、ユーザにはフォルダを開いてドロップされた項目を削除する権限がないため、ユーザがファイルを書き込み専用フォルダにドラッグすると、Finder は確認を求めます。
ドロップされたコンテンツがプロセスを開始するときには、追加のフィードバックを提供します。 ユーザが印刷などのタスクを表すアイコンに項目をドロップした場合は、タスクが開始されたことを示し、ユーザにタスクの進行状況を通知し続けて下さい。
ドロップされた項目から関連部分を抽出します。 たとえば、ユーザが連絡先アプリから メール メッセージの [受信者へ]フィールドに person をドラッグすると、名前とメールアドレスのみが受け入れられ、連絡先の残りのアドレス情報は受け入れられません。
コンテンツがドロップされた後、それに応じて選択を更新します。 選択したコンテンツを同じコンテナ内の新しい場所にドラッグすると、新しい場所で選択されたままになります。選択したコンテンツを別のコンテナにドラッグすると、そのコンテンツは新しい場所で選択され、以前の選択はすべて解除されます。
ドロップされたテキストに適切なスタイルを適用します。 宛先が同じスタイルのテキスト属性をサポートしている場合、ドロップされたテキストは元のフォント、書体、およびサイズの属性を維持する必要があります。それ以外の場合、ドロップされたテキストは、宛先のフォント、書体、およびサイズの属性を想定する必要があります。
ドラッグされたデータの共有
あなたのアプリから Finder にコンテンツを人々がドラッグできるようにしてください。 理想的には、このコンテンツを、あなたのアプリにドラッグして戻したり、アプリで開ける形式で出力します。たとえば、カレンダーを使用すると、ユーザはイベントを .ics ファイルとして Finder にドラッグできます。このファイルは、カレンダーで開いたり、他のユーザと共有したりできます。
ヒント
一部のアプリは、ドラッグされたコンテンツをクリッピングで出力します。これは、ドラッグされたコンテンツを保存するための一時的なコンテナです。生成された後、クリッピングを新しい宛先にドラッグできます。ほとんどのシステムアプリでは、ユーザはテキストをクリッピングとして Finder にドラッグし、後でクリッピングをテキストフィールドまたは他の場所にドラッグできます。クリッピングはクリップボードとは関係がないことに注意してください。ドラッグアンドドロップのクリッピングを生成してもクリップボードには影響しません。