Haptic Feedback 읽어보기 (iOS10 Human Interface Guidelines)

2016-10-12
18 Views

Haptic Feedback이란?

Haptic Feedback을 한국어로 하면 촉각 피드백이라고 표현할 수 있을듯 하다. 예로 맥북의 감압식 트랙패드에서도 있는듯한데 아이폰7에서는 홈버튼이 물리적인 버튼이 없어진 것도 비슷하다고 본다. 또한 iOS10에서는 해당 기기에서 Haptic Feedback API는 앱에서 사용할 수 있게 되었다. 이에 따라 iOS Human Interface Guidelines에 Haptic Feedback항목이 추가되어 해당 내용을 읽어보았다. (2016년 10월 4일 영문문서를 참고함)

지침 내용

  • 시스템 표준 인터페이스 (선택적 스위치, 슬라이더)는 자동으로 촉각 피드백을 제공하고 있다
  • 홈브류에서도 촉각 피드백을 생성하는 것이 가능하다 (단, 힘과 행동은 운영체제가 관리한다)

피드백 종류

  • Notification
    • 작업이나 작업의 성공 및 실패 경로를 표현한다
  • Impact
    • 눌림등의 무게를 표현(가벼움, 중간, 무거움)
    • 외형의 경험을 보완하는 역할
  • Selection
    • 선택의 변화를 표현 (예. 피커휠을 스크롤하면 가벼운 터치를 느낌)

촉각 피드백을 사용시 주의할 점

  • 사용처를 잘 고려해서 사용한다
    • 너무 많은 사용은 혼란을 초래하며 피드백의 읨미가 없어져 버린다
  • 일반적으로 사용자가 시작한 액션에 대한 응답으로 사용한다
    • 자신이 시작한 액션이라면 해당 피드백이라는 인식이 쉬워지기 때문이다
  • 피드백의 종류를 마음대로 정의하지 않는다
    • 사용자가 일관된 경험을 하는데 목적대로 피드백을 사용할 수 있다
    • 예로 impact 피드백을 작업의 성공을 알리는 경우 사용하지 말자. 제대로 Notification피드백의 Success변형에 사용해라
  • 시각적 경험을 조정할 수 있다.
    • 시각적인 부분과 촉각 피드백을 같이 제공함에 따라 행동과 결과 사이에 깊은 관계를 만들수 있다
    • 사용자가 느끼는 것과 일치하도록 애니메이션을 분명하고 정확하게 한다
  • 의사소통을 촉각 피드백에 의존하지 말아라
    • 모든기기가 촉각 피드백을 지원하는 것은 아니다
    • 시용자는 설정에서 촉각 피드백 기능을 해제할 수 있다. (항상 사용할 수 있는것은 아님)
    • 촉각 피드백은 기기가 활성화하고 앱이 가장 위에이 있는 경우에만 발생한다
    • 중요 정보는 사용자가 놓치지 않도록 하기 위해 겉모양과 소리로 보완한다
  • 겉모양에 의한 피드백이 숨어버리는 경우 촉각 피드백을 사용한다
    • 예로 화면 안의 객체를 위치로 드래그하면 대상을 숨길 수 있다. 사용자가 특정 위치까지 드래그한 것을 알리기 위한 피드백을 만들도록 검토한다
  • 촉각 피드백을 시작하기 전에 Taptic Engine을 준비한다.
    • 촉각 피드백을 사용하면 관련 지연이 발생하기 때문에 피드백을 요청전에 Taptic Engine준비하는 것이 최고이다. 그렇게 하지 않으면 촉각 피드백이 뒤늦게 실행되어 사용자가 액션이나 보는 화면가 일치하는 느낌을 받을 수 없게 된다
  • 소리와 동기화할 수 있다
    • 촉각 피드백은 소리와 자동으로 동기화하지 않는다. 촉각 피드백과 동시에 소리를 사용한다면 개발자의 책임으로 동기화가 가능하다.

실제 촉각 피드백 사용하기

지침에 있는데로 촉각 피드백을 보완하기 위한 목적으로 사용하는 것이다. 사용처를 파악하는것을 중요하게 보고 사용하는 것을 추천한다. 또한 UIFeedbackGenerator의 API에 촉각 피드백을 시작하기 전에 Haptic Engine을 준비하는 함수로 UIFeedbackGenerator의 prepare()가 준비되어 있지만, prepare()를 호출하여 피드백이 발생하기 까지 너무 시간이 길면 피드백이 발생하기 전에 Taptic Engine이 대기상태가 되어버려 반대로 prepare()를 호출하는 것이 피드백이 실행되기 전 느린 대기시간을 줄이기 위한 효과를 얻을 수 없다고 한다.

참고 자료

UIFeedbackGenerator 사용하기

UIFeedbackGenerator는 iOS10부터 추가된 아이폰7 및 아이폰7+의 Taptic Engine을 제어하기 위한 클래스로 홈버튼을 누르거나 통지을 열고  Date Picker를 돌릴 때 움직임을 제어하는 것이다. 이 감각적인 부분은 아이폰7을 실제로 이용하지 않으면 모른다.

하위 클래스

UIFeedbackGenerator는 추상클래스이기 때문에 실제 개발시 아래 3가지중 하나를 사용하게 된다.

  • UIImpactFeedbackGenerator – 객체가 충돌하거나 효과적인 피드백을 주고 싶은 경우 사용함
  • UISelectionFeedbackGenerator – 선택 영을 변경할 때 피드백을 주고 싶은 경우 사용함
  • UINotificationFeedbackGenerator – 성공과 실패, 경고등의 피드백을 주고 싶을 때 사용함

사용방법

다음과 같은 흐름으로 제어된다.

  1. Generator를 인스턴스화한다.
  2. prepare() 호출 (옵션 – 이걸 미리 선언해두면 실제 사용시 지연시간없이 바로 실행됨)
  3. 실행된다 (impactOccurred() 호출)
  4. Generator 실행 (옵션)

아래 예제는 버튼을 누를 때 피드백을 제공하는데 UIImpactFeedbackGenerator를 인스턴스화할 때 UIImpactFeedbackStyle로 넘길 수 있는데 이것이 바로 힘을 주는 부분이라고 본다.

 

Facebook Comments

You may be interested

모바일 앱 아키텍처
Swift
shares20 views
Swift
shares20 views

모바일 앱 아키텍처

MJ Kim - 4월 22, 2017

이 내용은 나름대로 개발해본 내용을 토대로 정리해본 모바일 앱 아키텍처에 대한 내용이다. 이를 정리한 이유는 오래된 아키텍처부터 최근 아키텍처까지 정리해보고…

시간차를 얻는 Date Extension
Swift 3.0
shares6 views
Swift 3.0
shares6 views

시간차를 얻는 Date Extension

MJ Kim - 4월 12, 2017

사용자가 남길 내용에 대한 시간표시를 할 때 일정한 시간차를 표현해주는 경우가 있어 이에 대한 Date Extention을 정리해 보았다. [crayon-58fd9bbbc2b5b935881491/]  

Swift 3.1에서 없어진 문법 정리
Swift 3.0
shares34 views
Swift 3.0
shares34 views

Swift 3.1에서 없어진 문법 정리

MJ Kim - 3월 31, 2017

Swift언어는 무엇인가 나올때마다 없어지는 것들이 있어, Swift 3.1에서 컴파일할 수 없게 된 문법내용을 정리했다. switch문을 사용하여 enum에서 protocol을 여러가지 패턴으로…