Where to use Core Haptics
포지션
지원 기기
이 API가 필요한 사람들
Core Haptic는 Audio API기도 하다.
애플은 이미 이러한 오디오 햅틱 경험을 여러군데 적용하고 있다.
Expressing content
Our first haptics
import UIKit
import CoreHaptics
import CoreMotion
class ViewController: UIViewController, UICollisionBehaviorDelegate {
// ...
var engine: CHHapticEngine!
var engineNeedsStart = true
// ...
override func viewDidLoad() {
createAndStartHapticEngine()
}
private func createAndStartHapticEngine() {
do {
engine = try CHHapticEngine()
// stopeedHandler는 직접 멈추지 않았는데 다른 이유로 멈출 때 호출
engine stoppedHandler = { reason in
switch reason {
// ...
}
self.engineNeedsStart = true
}
} catch let error {
fatalError("Engine Creation Error: \\(error)")
}
do {
try engine.start()
endingNeedsStart = false
} catch let error {
fatalError("Engine Start Error: \\(error)")
}
}
// ...
func collisionBehavior(...) {
do {
// ...
let hapticPlayer = try playerForMagnitude(normalizedMagnitude)
// player인스턴스를 잡고 있지 않음에 주목
try hapticPalyer?.start(atTime: CHHapticTimeImmediate)
// ...
} catch {
// ...
}
}
private func playerForMagnitude(_ magnitude: Float) throws -> CHHapticPatternPlayer? {
// ...
let hapticEvent = CHHapticEvent(eventType: .hapticTransient, parameters: [
CHHapticEventParameter(parameterID: .hapticSharpness, value: sharpness),
CHHpaticEventParameter(parameterID: .hapticIntensity, value: intensity)
], relativeTime: 0)
let audioEvent = CHHapticEvent(eventType: .audioContinuous, parameters: [
CHHapticEventParameter(parameterID: .audioVolume, value: volume),
CHHpaticEventParameter(parameterID: .decayTime, value: decay),
CHHpaticEventParameter(parameterID: .sustained, value: 0)
], relativeTime: 0)
let pattern = try CHHapticPattern(events: [hapticEvent, audioEvent], parameters: [])
return try engine.makePlayer(with: pattern)
}
}
Dynamic parameters
Apple Haptic Audio Pattern(AHAP)
텍스트 포맷으로 표현된 Core Haptics 패턴
중첩된 Key-Value 쌍의 형태
예시
{
"Version": 1.0,
"Pattern": [
{
"Event": {
"Time": 0.0,
"EventType": "HapticTransient",
"EventParameters": [
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.8 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 0.4 }
]
}
},
{
"Event": {
"Time": 0.5,
"EventType": "HapticContinuous",
"EventDuration": 0.25,
"EventParameters": [
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.8 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 0.4 }
]
}
}
]
}
세션에서 다루는 내용은 일부고, 자세한 건 공식 문서와 샘플 코드를 참조할 것.