Это очень просто. ScrollView похож на любой другой вид, поэтому он в основном перетаскивает вид из одного суперпредставления в другое суперпредставление.
Ваша иерархия следующая:
Вы хотите перетащить представление V из представления A в представление B. Это означает, что когда вы начинаете D & D, V является подпредставлением A, а когда вы заканчиваете, V является подпредставлением B. A и B должны иметь общее суперпредставление. S.
Шаги:
0 / Ваш сенсорный распознаватель должен быть на S, а не на A или B.
1 / Пользователь нажимает на V. Вы удаляете его из A и добавляете его в S в той же позиции (в UIView есть методы для преобразования позиции из вида в другой вид).
2 / Пользователь перетаскивает V в B. Вы меняете положение V в S.
3 / Пользователь отбрасывает V. Если он достаточно близко к B, вставьте его в B (трансформируя позицию S-> B) и анимируйте разницу между позициями. Если он все еще близок к A, анимируйте его обратно к A. Если он находится где-то между A и B, вы можете либо вставить его в ближайший, либо оставить там и заблокировать все другие действия пользователя, пока пользователь снова не нажмет V и не перетянет его в A или Б.