[swift] CoreHaptics를 활용한 애플리케이션 개발

CoreHaptics는 iOS, iPadOS, macOS에서 진동, 타격, 발산, 떨림과 같은 햅틱(고유진동) 피드백을 구현하기 위한 프레임워크입니다. CoreHaptics는 햅틱 엔진을 직접 제어하는 기능과 진행 상황에 따라 동적인 햅틱 피드백을 제공하는 기능을 제공하여 사운드와 햅틱을 조합하여 사용자에게 더욱 풍부한 경험을 제공할 수 있습니다.

CoreHaptics가 지원되는 기기

현재 CoreHaptics는 iPhone 8 이상의 iOS 기기에서 지원됩니다. 타원형 힙틱 엔진을 사용하여 섬세한 진동을 만들 수 있으며, 기기의 Taptic 엔진을 사용하여 구현됩니다.

CoreHaptics를 사용한 햅틱 피드백 추가 방법

CoreHaptics를 활용한 햅틱 피드백을 추가하는 방법은 다음의 단계를 따릅니다.

  1. CoreHaptics를 가져오기 먼저 CoreHaptics를 가져와야 합니다. 코드 파일의 맨 위에 import 문을 추가하여 CoreHaptics 프레임워크를 가져올 수 있습니다.

    import CoreHaptics
    
  2. CHHapticEngine 설정 CHHapticEngine은 햅틱을 제어하는 핵심 클래스입니다. 햅틱 엔진을 생성하고 설정해야 합니다.

    var hapticEngine: CHHapticEngine!
       
    do {
        hapticEngine = try CHHapticEngine()
        try hapticEngine.start()
    } catch {
        print("Error creating haptic engine: \(error)")
    }
    
  3. CHHapticPattern과 CHHapticEvent 설정 햅틱 피드백의 강도, 지속시간, 시간 등을 결정하기 위해 CHHapticPattern 및 CHHapticEvent를 설정합니다.

    let intensity = CHHapticEventParameter(parameterID: .hapticIntensity, value: 1)
    let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness, value: 1)
    let event1 = CHHapticEvent(eventType: .hapticContinuous, parameters: [intensity, sharpness], relativeTime: 0, duration: 1)
    let pattern = try CHHapticPattern(events: [event1], parameters: [])
    let hapticPlayer = try hapticEngine.makePlayer(with: pattern)
    
  4. 햅틱 재생 설정한 햅틱을 실제로 실행시키기 위해 hapticPlayer를 사용하여 햅틱을 재생합니다.

    try hapticPlayer.start(atTime: CHHapticTimeImmediate)
    

CoreHaptics를 사용한 애플리케이션 예제

다음은 CoreHaptics를 사용하여 애플리케이션에 햅틱 피드백을 추가하는 간단한 예제 코드입니다.

import UIKit
import CoreHaptics

class ViewController: UIViewController {
    var hapticEngine: CHHapticEngine!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupHaptics()
    }
    
    func setupHaptics() {
        do {
            hapticEngine = try CHHapticEngine()
            try hapticEngine.start()
        } catch {
            print("Error creating haptic engine: \(error)")
        }
    }
    
    func triggerHapticFeedback() {
        do {
            let intensity = CHHapticEventParameter(parameterID: .hapticIntensity, value: 1)
            let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness, value: 1)
            let event1 = CHHapticEvent(eventType: .hapticContinuous, parameters: [intensity, sharpness], relativeTime: 0, duration: 1)
            let pattern = try CHHapticPattern(events: [event1], parameters: [])
            let hapticPlayer = try hapticEngine.makePlayer(with: pattern)
            try hapticPlayer.start(atTime: CHHapticTimeImmediate)
        } catch {
            print("Error playing haptic: \(error)")
        }
    }

    @IBAction func buttonTapped(_ sender: UIButton) {
        triggerHapticFeedback()
    }
}

이 예제 코드에서는 UIButton이 탭될 때 triggerHapticFeedback 함수가 호출되어 햅틱 피드백을 실행합니다.

CoreHaptics를 사용하여 애플리케이션에 햅틱 피드백을 추가하는 것은 사용자 경험을 향상시키는데 중요한 역할을 합니다. 사용자의 동작에 따라 동적으로 변화하는 햅틱 피드백은 애플리케이션 사용 경험을 더욱 풍부하고 생생하게 만들어줍니다.

참고: CHHapticPattern - Apple Developer Documentation

이상으로 CoreHaptics를 활용한 애플리케이션 개발에 대한 내용을 정리해 보았습니다. CoreHaptics를 사용하여 다양한 효과적인 햅틱 피드백을 지원하는 애플리케이션을 개발해보세요.