Одним пальцем пользователь может перетаскивать или дублировать выбранные фотографии, текст или другое содержимое по экрану из одного места в другое, а затем поднять палец, чтобы завершить действие.

DragDrop.mp4

Касание и удержание выбранного контента создает эффект того, что он как бы приподнимается и прилипает к пальцу юзера. По мере перетаскивания контента анимация и визуальные подсказки говорят о возможных местах назначения. Система также отображает бэйджик, который указывает, что удаление контента недоступно или приведет к дублированию содержимого, а не к его перемещению.

Источники и направление

Перетаскивание (drag and drop от англ) контента означает перемещение выбранного содержимого из исходного местоположения в место назначения. Эти местоположения могут находиться как бы в одном контейнере, например в одной текстовой вьюшке, или в разных контейнерах, например в двух разных текстовых вьюшках на противоположных сторонах в режиме многозадачности. Например, в заметках пользователь может перетащить выделенный текст в новое место в той же заметке. В “Напоминаниях” пользователь может перетаскивать отдельные напоминания из одного списка и помещать их в другой.

Untitled

На iPad исходные и целевые местоположения могут быть даже в разных приложениях, что позволяет взаимодействовать между ними, например юзер может перетаскивать фотографию с веб-страницы из Safari в новое сообщение в приложение “Почта”. При перетаскивании контента пользователь может получить доступ к другому приложению с помощью режима многозадачности, перейдя на главный экран или проведя пальцем вверх от нижней части экрана, чтобы открыть док-панель (Dock от англ, это панель из приложений на домашнем экране iPhone или iPad).

<aside> ⚠️ Перетаскивание контента между приложениями всегда приводит к дублированию, а не перемещению контента.

</aside>

Поддержка перетаскивания

Перетаскивание - это эффективная, интуитивно понятная функция, которую пользователи ожидают во всей системе. Если ваше приложение подразумевает наличие или работу с текстом, фотографиями, видео, аудио или другим контентом, который юзеры могут захотеть переместить, скопировать или вставить куда-либо, то ваше приложение должно поддерживать перетаскивание.

Сделайте перетаскивание доступным для всего что можно выбрать и отредактировать в рамках “контента” в вашем приложении. Выбираемый контент должен быть перетаскиваемым, а редактируемый контент надо уметь заменять на тот что юзер хочет перетащить. Также убедитесь, что ваше приложение поддерживает копирование и вставку в этих областях.

Разрешите перетаскивать контент на контролы, когда это применимо. В общем настройте контролы так, (те, что позволяют вводить или выбирать какие-либо данные), например текстовые поля, чтобы вставлять значения из перетаскиваемого контента.

По возможности используйте стандартные текстовые вью и текстовые поля ввода. Эти элементы имеют встроенную поддержку перетаскивания.

Untitled

Для повышения эффективности рассмотрите возможность поддержки функции перетаскивания нескольких элементов. Во многих приложениях юзер может перетащить один элемент одним пальцем и во время перетаскивания выбрать дополнительные элементы, коснувшись их другим пальцем. Выбранные элементы отображаются в сложенном виде (будто стопка) под пальцем, которая перетаскивается вслед за исходным элементом. Затем юзер перетаскивает и помещает все элементы в нужное место. Например, на главном экране можно выбрать несколько иконок приложений и перетащить их в нужную папку одновременно. Некоторые приложения, например “Фотографии”, предлагают режим выбора, который позволяет выбирать несколько элементов перед перетаскиванием.

Untitled

Определите, должно ли перетаскивание контента в вашем приложении приводить к перемещению или копированию. В общем, перемещение имеет смысл, когда исходный и конечный контейнеры одинаковы (перетаскивание текста внутри документа), а копирование имеет смысл, когда сущности разные (перетаскивание между документами или между приложениями). Однако это не всегда так. Прежде всего, перетаскивание должно вести себя интуитивно. В приложении “Напоминания” перетаскивание напоминаний между списками перемещает их вместо копирования, потому что этого ожидают люди. Перетаскивание же контента между приложениями всегда приводит к копированию.

Позвольте, когда это возможно, юзерам отменить перетаскивание. Как правило, когда пользователи непреднамеренно тащат контент не туда куда им нужно, они должны иметь возможность использовать функцию отмены, чтобы вернуться предыдущее состояние в вашем приложении. То есть перетаскиваемый контент должен быть убран и, если он был перемещен из другого места в вашем приложении, восстановлен в исходное место.

Рассмотрите возможность включения Spring loading (от автора: не знаю как перевести кроме как “пружинная загрузка”). С помощью Spring loading (пружинная загрузка) юзеры могут активировать определенные контролы, такие как кнопки и сегментированные контролы, перетащив и удерживая контент поверх них, не убирая пару секунд. Например, в приложении “Почта” выбранные сообщения можно перетащить на кнопку "Назад" в панели навигации, чтобы добраться до других мест по иерархии почтовых ящиков. Никогда не делайте пружинную загрузку единственным способом активации контрола. Используйте его как вспомогательный способ, который можно обнаружить и который знаком юзерам iOS системы. В большинстве случаев контрол, на который перетаскивают контент также должен реагировать на жест касания (имеется в виду обычный тап/нажатие/касание).

Отображение перетаскиваемого контента