iOS HIG 독서모임 Drag & Drop (1)

Drag & Drop은 무엇인가?
- 어떤 콘텐츠를 한 위치에서 다른 위치로 드래그하여 이동시키거나 복제시키는 것.
- Drag & Drop은 다른 컨테이너끼리 상호작용이 가능하다.
- 예를 들어, 프레젠테이션 화면에 있는 어떤 사진을 Drag하여 메모장에 Drop 하는 경우가 이에 해당됨.
- 아이패드에서는 사파리에서 사진을 드래그 하여 이메일에 붙여넣는 등의 상호작용이 가능함.
- Drag & Drop을 사용할 때 주의할 점 ⭐️⭐️
- 앱 간에 콘텐츠를 Drag & Drop 하는 것은 콘텐츠의 이동이 아니라 콘텐츠의 복사를 의미함.
Drag & Drop을 사용할 때 주의할 점
- 선택을 할 수 있고, 편집을 할 수 있는 모든 컨텐츠에 Drag & Drop 기능을 넣어라.
- 예를 들어, 내가 Todo 앱을 만들었는데 어떤 기능이 1) 선택을 할 수 있고 2) 편집을 할 수 있는 것이라면 Drag & Drop을 넣으라는 뜻이다. =>TableView Cell은 대표적인 1) 선택을 할 수 있고 2) 편집을 할 수 있는 객체이다.

- TextField나 TextView 같이 데이터를 입력받는 곳에도 Drag & Drop이 가능하게 하라.
- 어떤 Text를 Drag 하여 TextField나 TextView에 Drop 하는 것을 허용하게 하라는 뜻으로 이해함.
- 가능하면 커스텀 되지 않은 TextField와 TextView를 사용할 것.
- 커스텀 되지 않은 표준 TextField와 TextView에서만이 내장된 Drag & Drop 기능을 사용할 수 있기 때문이다. ⭐️⭐️
- 커스텀 된 TextField나 TextView를 사용하려면 TextField 뒤에다가 Image를 넣고 사용하면 된다.
- 여러 항목을 한 번에 Drag & Drop 하는 것을 지원하도록 해라. (효율성을 위해서)
- 콘텐츠를 Drag & Drop을 할 때, 이동으로 사용할 것인지 복사로 사용할 것인지 결정하자.
- 일반적으로, 같은 앱 내에서 Drag & Drop을 하는 경우에는 이동이 적용됨
- 같은 앱이 아닌데 Drag & Drop을 하는 경우에는 복사가 적용됨. (근데 항상 그렇지는 않으므로 주의가 필요함)
- 가장 중요한 것은 Drag & Drop이 사람들이 기대하는 대로 동작해야 한다는 점.
- 예를 들면, Todo List에서 Drag & Drop을 사용하는 경우 사람들은 복사를 기대하지 않고 Todo List 간에 이동이 일어날 것으로 기대한다.
- Drag & Drop을 취소할 수 있는 기능을 넣는 것이 좋다.
- 실수로 Drag & Drop을 다른 곳에 했을 때, 해당 실행을 취소시키는 동작도 필요하다는 것.
- Drop 된 컨텐츠는 제거되고, 이동된 컨텐츠는 다시 원위치로 이동하도록 해야 함
- Spring Loading을 활성화하라.
- Spring Loading이란 어떤 앱을 Drag 하다가 특정 폴더나 특정 버튼에 몇 초간 올려 놓았을 때 폴더가 열리거나 특정 버튼의 기능이 반응하는 등의 기능을 의미한다.
- Spring Loading을 컨트롤을 활성화하는 유일한 방법으로 만들어서는 안 됨. (근데 이렇게 만들 사람은 별로 없을 듯)