Drag and Drop(ドラッグアンドドロップ)
ユーザは 1 本の指で、選択した写真、テキスト、またはその他のコンテンツをある場所から別の場所にドラッグし、指を離しててドロップすることで、コンテンツを移動または複製できます。
選択したコンテンツを長押しすると、上昇してユーザの指にくっついているように見えます。コンテンツがドラッグされると、アニメーションと視覚的な手がかりが可能な行き先を識別します。また、システムは、ドロップできない場合、またはコンテンツを移動するのではなく複製する結果になることを示すバッジも表示します。開発者向けガイダンスについては、UIKit (UIKit) の ドラッグアンドドロップ (Drag and Drop) を参照してください。
送信元と宛先
ドラッグアンドドロップでは、選択したコンテンツを資料の出所から宛先に移動します。これらの場所は、テキストビューのように同じコンテナ内に配置することも、分割ビューのそれぞれ反対側のテキストビューのように異なるコンテナ内に配置することもできます。たとえば、メモでは、ユーザは選択したテキストを同じメモ内の新しい場所にドラッグできます。リマインダでは、ユーザは個々のリマインダを 1 つのリストからドラッグして、別のリストにドロップできます。
iPad では、送信元と宛先の場所を異なるアプリにすることもできるため、Safari 内の Web ページから Mail の新しいメッセージに写真をドラッグするなどのアプリ間の相互作用が可能になります。コンテンツをドラッグしている間、ユーザは マルチタスク、ホームスクリーンの終了、またはスクリーンの下から上にスワイプして Dock を表示することで別のアプリにアクセスできます。
注意
アプリ同士でコンテンツをドラッグアンドドロップすると、コンテンツの移動ではなく、常にコピーが発生します。
ドラッグアンドドロップのサポート
ドラッグアンドドロップは、ユーザがシステム全体に広く実装されることを期待する、効率的で直感的な機能です。あなたのアプリにテキスト、写真、ビデオ、オーディオ、または人々が移動、コピー、または挿入したいその他のコンテンツが含まれている、または生成されている場合、あなたのアプリはドラッグアンドドロップをサポートすべきです。
選択および編集可能なすべてのコンテンツでドラッグアンドドロップを使用できるようにします。 選択可能なコンテンツはドラッグ可能であるべきで、編集可能なコンテンツはドロップされたコンテンツを受け入れるべきです。また、あなたのアプリがこれらの領域でのコピーとペーストをサポートしていることを確認してください。
該当する場合、コンテンツをコントロール上にドロップできるようにします。 一般に、ドロップされたコンテンツを受け入れるために、テキストフィールドなどのデータ入力または選択を可能にするコントロールを構成します。
可能な限り、標準のテキストビューとテキストフィールドを使用してください。 これらのシステム提供の要素には、ドラッグアンドドロップのサポートが組み込まれています。関連するガイダンスについては、テキストフィールド と テキストビュー を参照してください。開発者向けガイダンスについては、UITextField (UITextField) および UITextView (UITextView) を参照してください。
効率を高めるには、複数アイテムのドラッグアンドドロップのサポートを検討してください。 多くのアプリでは、ユーザは 1 本の指で 1 つのアイテムをドラッグでき、ドラッグ中に別の指でタップして追加のアイテムを選択できます。選択したアイテムは一緒に移動し、元のアイテムをドラッグしている指の下に積み重ねて表示されます。次に、ユーザはアイテムをグループとしてドラッグし、目的の宛先にドロップします。たとえば、ホームのスクリーンでは、複数のアプリアイコンを選択して、一度にフォルダ内にドラッグできます。写真などの一部のアプリでは、ドラッグする前に複数のアイテムを選択できる選択モードを提供します。
あなたのアプリ内でコンテンツをドラッグアンドドロップすると、移動またはコピーが発生するかどうかを判断します。 一般に、移動元と移動先のコンテナが同じ場合 (ドキュメント内でテキストをドラッグする)、コピーは異なる場合 (ドキュメント同士またはアプリ同士でドラッグする) に意味があります。ただし、これが常に当てはまるとは限りません。とりわけ、ドラッグアンドドロップは直感的に動作する必要があります。リマインダーでは、リスト同士でリマインダーをドラッグすると、コピーするのではなく移動しますが、これは、人々が期待していることだからです。アプリ同士でコンテンツをドラッグアンドドロップすると、常にコピーが作成されます。
可能な限り、ドラッグアンドドロップを Undo(元に戻す) できるようにします。 一般に、ユーザが誤って間違った宛先にコンテンツをドロップした場合、ユーザは [Undo(元に戻す)] を使用してアプリを以前の状態に戻すことができるべきです。つまり、ドロップされたコンテンツを削除し、アプリの他の場所から移動した場合は、元の場所に復元する必要があります。
バネ状にロードを有効にすることを検討してください。 バネ状にロードを使用すると、ユーザはボタンやセグメント化されたコントロールなどの特定のコントロールをアクティブ化して、選択したコンテンツをそれらの上にドラッグし、コンテンツをドロップせずに一時停止することで、それができます。たとえば、メールでは、選択したメッセージをナビゲーションバーの [Back(戻る)] ボタンにドラッグして、メールボックス階層内の他の場所に移動できます。コントロールをアクティブにする唯一の方法としてスプリングローディングを使用しないでください。発見できる装飾としてそれを使用してください。ほとんどの場合、バネ状ロードのコントロールもタップジェスチャに応答する必要があります。開発者向けガイダンスについては、UISpringLoadedInteraction (UISpringLoadedInteraction) を参照してください。
ドラッグされたコンテンツの提供
必要に応じて、ドラッグした項目のプレビューをカスタマイズします。 一般に、ユーザの指の下に表示されるプレビューは、ドラッグされているコンテンツの半透明の表現であるべきです。この外観はコンテキストを提供し、ドラッグが進行中であることを示し、ユーザがドラッグしたコンテンツの下にある宛先を確認できるようにします。
可能な限り、正確さの高いものから低いものの順に、ドラッグしたデータの複数の表現を提供します。 たとえば、線画を提供する場合、あなたのアプリは PDF ベクトル表現、透明性があり損失のない PNG 画像、透明性がなく損失の多い JPEG 画像の順に提供できます。このようにして、宛先はインポートできる最高品質の表現を選択できます。
該当する場合は、カスタムオブジェクトのネイティブバージョンを最も豊富な形式のデータとして提示します。 たとえば、チャートをドラッグできるアプリでは、最初にネイティブチャートオブジェクトを表示する必要があります。次に、チャートオブジェクトをサポートしないアプリに対して、チャートのイメージバージョンなどの代替手段を提供すべきです。
アプリのコンテンツの転送に時間がかかる場合やリソースを大量に消費する場合は、ファイルプロバイダ拡張機能を実装してください。 ファイルプロバイダ拡張機能は、転送プロセスを管理し、アプリが実行されなくなった場合でも、転送プロセスが確実に完了するようにします。ユーザがコンテンツをドロップするまで、転送プロセスは開始されないことに注意してください。開発者向けガイダンスについては、NSFileProviderExtension (NSFileProviderExtension) を参照してください。
あなたのアプリのコンテンツを転送する時間がかかる場合は、進行情報を提供します。 コンテンツをダウンロードしなければならない場合、または大きなファイルのコピーに時間がかかる場合は、進行状況の情報を提供します。少なくとも、コンテンツの合計サイズを提供して、宛先が残り時間を計算し、適切な進行状況インジケータを表示できるようにします。開発者向けガイダンスについては、NSProgress (NSProgress) を参照してください。
ドロップされたコンテンツの受け入れ
視覚的な手がかりを使用して、潜在的な目的地を特定し、コンテンツをドロップした場合の効果をプレビューします。 ハイライト、挿入ポイントインジケータ、およびアニメーションはすべて、宛先を特定できるための優れた方法です。ビューが微妙に点滅して、コンテンツがその上にドラッグされると色が変わります。また、段落が離れてドラッグされたイメージ用のスペースを作ります。スクリーン上に複数の宛先が表示されている場合は、一度に一つずつ特定します。ソースコンテナと宛先コンテナが同じの場合、コンテンツがソースから完全に離れてドラッグされてから再度入らない限り、強調表示は不要です。コンテンツがドロップされたとき、または宛先の上に配置されなくなったときは、強調表示が削除されていることを確認してください。
必要に応じて、宛先のコンテンツを自動的にスクロールします。 コンテンツが宛先の境界の外にドラッグされた場合、あなたのアプリは、宛先のコンテンツをスクロールするか、ユーザがまったく別の宛先にドラッグし続けることを許可するかを決定する必要があります。アプリでユーザがドラッグを続行できる場合は、ドラッグした項目がその上に配置されたときに自動スクロールが発生する領域を定義することを検討してください。たとえば、メールの長い下書きメッセージは、コンテンツが本文領域の上部または下部にドラッグされると自動的にスクロールします。標準のテキストビューとテキストフィールドは、この動作を自動的に採用します。
ドロップされたコンテンツでは可能な限り豊富な表現を抽出して表示します。 たとえば、あなたのアプリにチャートの複数の表現が提供されているとします。アプリがチャートをサポートしている場合、ネイティブのチャートオブジェクトを抽出して表示できます。アプリがチャートをサポートしていない場合は、代わりにチャートのイメージバージョンを抽出して表示できます。
該当する場合は、ドロップされたコンテンツの関連部分のみを抽出します。 たとえば、ユーザが [Contacts(連絡先)] を連絡先から ]Mail(メール)] メッセージの受信者フィールドにドラッグした場合、連絡先のアドレス情報ではなく、名前と電子メールアドレスのみが使用されます。
コンテンツがドロップされた後、テーブルビューとコレクションビューにプレースホルダを表示します。 プレースホルダは、コンテンツの転送が完了すると、コンテンツがどこにあるかを一時的に示します。
ドロップされたコンテンツの転送に時間がかかる場合に進行状況を表示します。 デフォルトでは、アプリ同士で時間のかかる転送が発生すると、システムはアプリモーダルの警告を表示します。テーブルビューまたはコレクションビュー内のプレースホルダに進行状況インジケータを表示するなど、進行状況の表示方法をカスタマイズして、ユーザがあなたのアプリの使用をブロックされないようにしてください。ユーザがコンテンツをドロップするまで、転送プロセスは開始しないことに注意してください。
ドロップされたコンテンツがプロセスを開始したときにフィードバックを提供します。 ユーザがタスクを開始するコントロール上にコンテンツをドロップした場合 (たとえば、共有サイトへのビデオのアップロード)、タスクが開始されたことを示し、ユーザに進行状況を通知し続けます。
ドロップが失敗したときにユーザーに通知します。 ファイル転送が中断されたなどの理由でドロップされたコンテンツを挿入できない場合は、ドロップが失敗したことをユーザに通知してください。
ドロップされたテキストに適切なスタイルを適用します。 ソースと宛先が同じスタイルのテキスト属性をサポートしている場合、ドロップされたテキストは元のフォント、書体、サイズ、およびその他の属性を維持する必要があります。それ以外の場合、ドロップされたテキストは宛先のスタイルを採用します。
ユーザがドラッグアンドドロップをすぐに undo(取り消し) できない場合に手を引くための微妙で直感的な方法を提供してください。 たとえば、共有アプリは、ドロップされたコンテンツを投稿する前に中間共有シートを提示します。この共有シートは、キャンセルボタンを提供しながら、ステータスメッセージなどの追加コンテンツを提供する方法を提供します。写真を共有写真ストリームにドラッグすると、写真はこの動作を示します。