Reference Raywenderlich Core Haptics
Core Haptics는 iOS 13.0에서 도입된 API로 이를 통해 커스텀 생성, 고해상도 촉감과, 오디오 피드백 , 진동 제작이 가능하다
Haptic 재생을 위해 HapticManager 클래스를 작성하고 시작한다.
import CoreHaptics
우선 모듈을 불러온다.
final class HapticManager {
init() throws {
guard CHHapticEngine.capabilitiesForHardware().supportsHaptics else {
throw CHHapticError(.notSupported)
}
let hapticEngine = try CHHapticEngine()
self.hapticEngine = hapticEngine
}
private let hapticEngine: CHHapticEngine
}
HapticManager 클래스를 생성할 때 CHHapcticEngine이 사용 가능한지 확인하고, 불가하다면 조기 종료문으로 에러를 전달한다.
햅틱 재생은 패턴을 만들어서 재생하는데 CHHapticPattern 클래스를 통해 만들어 진다.
private extension HapticManager {
// MARK: Haptic Patterns
func slicePattern() throws -> CHHapticPattern {
let slice = CHHapticEvent(eventType: .hapticContinuous,
parameters: [
.init(parameterID: .hapticIntensity, value: 0.35),
.init(parameterID: .hapticSharpness, value: 0.25)],
relativeTime: 0,
duration: 0.5
)
let snip = CHHapticEvent(
eventType: .hapticTransient,
parameters: [
.init(parameterID: .hapticIntensity, value: 1),
.init(parameterID: .hapticSharpness, value: 1)],
relativeTime: 0.08
)
return try .init(events: [slice, snip], parameters: [])
}
}
slicePattern이라는 이름으로 생성한 패턴은 다음과 같이 재생할 수 있다.
extension HapticManager {
// MARK: Play Haptic Patterns
func playSlice() throws {
try hapticEngine.start()
let player = try hapticEngine.makePlayer(with: slicePattern())
try player.start(atTime: CHHapticTimeImmediate)
hapticEngine.notifyWhenPlayersFinished { _ in
.stopEngine
}
}
}
이제 뷰컨트롤러에서 HapticManager를 불러와서 진동이 필요한 부븐에 hapticManager.playSlice()를 사용하면 지정해준 패턴이 진동하게 되겠다.