컨텐츠로 건너뛰기

jung2.net

iOS Developer

  • About jung2
  • 개발공부
  • 생각들

Search in jung2.net

카테고리

  • Algorithm
  • C/C++
  • Git
  • iOS
  • Objective-C
  • Others
  • Swift
  • 개발환경과 도구
  • 생각들

AD

카테고리 글 목록

  • Haptic Feedback 사용하기 2021-03-28
  • 사용할수 없는 Simulator 제거하기 2020-04-19
  • [Git] git config 활용 2020-03-01
  • [Git] ssh 사용하기 2019-12-15
  • macOS Mojave에서 Clang/Cmake 에러가 발생할 때 2019-04-07
  • 하나의 Podfile로 여러 타겟/프로젝트에 사용하기 2018-12-11
  • macOS Mojave update 후 git 등의 오류가 발생할 때 해결방법 2018-09-28
  • PHP7.1 fpm with nginx on macOS 2018-09-17
  • SwiftLint 적용하기 2018-03-19
  • Swift Singleton Pattern 구현 2017-12-10
  • GCD를 이용한 Objective-C Singleton Pattern의 구현 2017-12-09
  • Swift Protocol Default Implementation 2017-09-17
  • Xcode Build Operation Time Check 2017-08-16
  • Property Observer 2017-07-30
  • macOS+nginx에 Let’s Encrypt를 통해 HTTPS적용하기 2017-06-27
  • Swift에서 DEBUG flag 사용하기 2017-06-24
  • UIViewController Life Cycle 2017-05-28
  • iOS Application Life Cycle 2017-05-28
  • Mac의 80포트가 Apache에서 미리 사용중일 때의 해결방법 2016-11-01
  • Nginx Install 2016-10-31
  • MySQL Install 2016-10-31
  • Mac 의 패키지 매니저, HomeBrew 설치. 2016-10-31
  • vi(m) Settings 2016-10-31
  • MacOS의 terminal 설정 2016-10-31
  • 구형 Mac Mini HDD -> SSD 교체 2016-10-30
  • va_arg(가변인자) 함수의 사용 및 커스텀 printf 구현 2016-08-24
  • #include vs #import 2016-04-04
  • NULL vs null vs nil 2016-04-04
  • Objective-C 언어의 기본 자료형 2016-04-04
  • strtok를 이용하여 문자열을 원하는 특정 문자로 나누는 방법 2015-11-24
  • printf를 이용하여 콘솔 디버깅하기 2015-11-17
  • Selection Sort 2015-04-19
  • Pthread를 이용한 멀티스레드 프로그래밍 2015-02-11
  • Breadth First Search (BFS) 2015-01-29
  • Depth First Search (DFS) 2014-12-22
  • Visual Studio Debugger 2014-11-28
  • Dijkstra’s Algorithm 2014-10-27
  • Prim’s Algorithm 2014-10-15
  • Heap Sort 2014-10-05
  • Kruskal’s Alogorithm 2014-09-19
  • Preprocessor Macro로 .h 의 중복 컴파일을 방지하는 방법 2014-08-29
  • Linked List 2014-08-17
  • Visual Studio에서 Release Build 하기 2014-07-24
  • Xor (Exclusive-OR) Swap 2014-07-06
  • Unix File Permission 2014-06-30
  • stdio.h의 함수들이 C4996 에러로 컴파일되지 않을 때의 해결법 2014-06-17
  • DiskPart를 이용하여 부팅 가능한 USB Disk 만들기 2014-06-01
  • Banker’s Algorithm 2014-05-23
  • Shared Memory 2014-05-23
  • Custom Shell Program 2014-05-10
  • Sudoku Solution Validator 2014-04-07
  • sftp 사용법 2014-04-06

최신 글

  • Haptic Feedback 사용하기 2021-03-28
  • 사용할수 없는 Simulator 제거하기 2020-04-19
  • [Git] git config 활용 2020-03-01
  • [Git] ssh 사용하기 2019-12-15
  • macOS Mojave에서 Clang/Cmake 에러가 발생할 때 2019-04-07

Stats

  • 37,700 hits

RSS

RSS Feed

카테고리 : 개발공부

Haptic Feedback 사용하기

Haptic Feedback 이 지원되는 아이폰 디바이스라면 코드를 통해서 사용자에게 피드백을 줄 수가 있다.
애플의 User interaction guide에 따르면, 적절한 햅틱 피드백은 사용자 경험을 증대시켜 줄 수 있다고 한다.

코드로 피드백을 발생시키는 방법은 굉장히 간단한데, 애플의 Developer guide에 따르면, 추상 클래스로 UIFeedbackGenerator가 있고, feedback 에 대한 전반적인 설명을 제공한다.
우리가 사용할 수 있는 실제 구현된 클래스는 다음의 세가지가 있다.
– UIImpactFeedbackGenerator: 말그대로 사용자가 인지할 수 있는 충돌(?)이 발생했을 때 사용하는게 좋다고 한다.
– UISelectionFeedbackGenerator: UI상 어떤 선택(?)이 발생했을 때 사용하는게 좋다고 한다. Youtube app의 경우 Feed 에서 자동재생이 넘어가는 경우에 이 피드백을 발생시키는 것 같다.
– UINotificationFeedbackGenerator: 이벤트의 성공, 실패, 경고 등을 피드백할 경우 사용하는 게 좋다고 한다.

애플의 가이드에 따르면 위의 세 가지 Generator 중 하나를 적절한 상황에 맞게 사용하면 되는데, 아래의 절차를 따르길 권장한다.
1. instantiate
2. ~Generator.prepare()
3. triger
4. release
위 절차 중 2번과 4번은 필수는 아닌데, prepare의 경우에는 시스템의 햅틱 엔진이 idle에서 prepare 상태로 진입할 수 있도록 도와준다고 하며 이 경우에는 feedback의 발생 지연을 최소화시켜 줄 수 있다고 한다.
애플의 예제는 아래와 같다.

var feedbackGenerator : UISelectionFeedbackGenerator? = nil
@IBAction func gestureHandler(_ sender: UIPanGestureRecognizer) {
    switch(sender.state) {
    case .began:
        // Instantiate a new generator.
        feedbackGenerator = UISelectionFeedbackGenerator()
        
        // Prepare the generator when the gesture begins.
        feedbackGenerator?.prepare()
    case .changed:
        // Check to see if the selection has changed...
        if  myCustomHasSelectionChangedMethod(translationPoint: sender.translation(in: view)) {
            
            // Trigger selection feedback.
            feedbackGenerator?.selectionChanged()
            
            // Keep the generator in a prepared state.
            feedbackGenerator?.prepare()
        }
    case .cancelled, .ended, .failed:
        // Release the current generator.
        feedbackGenerator = nil
    default:
        // Do Nothing.
        break
    }
}

대부분의 UI가 그렇듯이 햅틱 피드백도 마찬가지로 너무 과하게 남발할 경우 사용자에게 되려 불편함을 초래할 수 있을 것 같다.

앱이 시스템 엔진을 트리거하여 사용하는 것이므로, 시스템이 판단하여 저전력 상태 혹은 지원하지 않는 디바이스, 사용자가 햅틱 피드백 엔진을 사용하지 않는 경우 등에는 동작하지 않는다고 한다.
코드를 만드는 사람은 이러한 케이스를 전혀 고려하지 않고 triger를 해도 앱에 전혀 문제가 없도록 설계되어 있는 듯 하다.

적절한 상황에서 적절한 피드백을 통해 사용자 경험을 확대시킬 수 있는 지점을 찾는게 구현보다 더 중요한 것 같다.

UIFeedbackGenerator와 관련된 자세하고 정확한 내용은 애플 가이드문서를 참조하길 추천한다.

작성일자 2021-03-282021-03-28카테고리 iOS태그 ios haptic feedback, uifeedbackgeneratorHaptic Feedback 사용하기에 댓글 남기기

글 탐색

페이지 1 페이지 2 … 페이지 52 다음 쪽
About jung2 Proudly powered by WordPress