タップ時にデバイスがふるえる機能の追加方法です
なるべく少ない設定で触覚をつけたい
方法
触覚用のクラスを作ります。
よかったらコピペで使ってください。
import Foundation
import CoreHaptics
class Haptics:NSObject {
var engine: CHHapticEngine?
lazy var supportsHaptics: Bool = {
CHHapticEngine.capabilitiesForHardware().supportsHaptics
}()
override init() {
super.init()
if supportsHaptics {
createEngine()
}
print(supportsHaptics)
}
func createEngine() {
do {
engine = try CHHapticEngine()
} catch let error {
fatalError("Engine Creation Error: \(error)")
}
engine?.stoppedHandler = { reason in
print("Stop Handler: The engine stopped for reason: \(reason.rawValue)")
switch reason {
case .audioSessionInterrupt: print("Audio session interrupt")
case .applicationSuspended: print("Application suspended")
case .idleTimeout: print("Idle timeout")
case .notifyWhenFinished: print("Finished")
case .systemError: print("System error")
default:
print("Unknown error")
}
}
engine?.resetHandler = {
print("The engine reset --> Restarting now!")
do {
try self.engine?.start()
} catch let error {
fatalError("Engine Start Error: \(error)")
}
}
do {
try self.engine?.start()
} catch let error {
fatalError("Engine Start Error: \(error)")
}
}
func playHapticsFile(_ filename: String){
if !supportsHaptics {
return
}
guard let path = Bundle.main.path(forResource: filename, ofType: "ahap") else {
return
}
do {
try engine?.start()
try engine?.playPattern(from: URL(fileURLWithPath: path))
} catch {
print("haptics error")
}
}
}
ハプティクスファイルを作ります。
Tap.ahap
{
"Pattern":
[
{
"Event":
{
"Time": 0.0,
"EventType": "HapticTransient",
"EventParameters":
[
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.5 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 1 }
]
}
},
{
"Event":
{
"Time": 0.1,
"EventType": "HapticTransient",
"EventParameters":
[
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.3 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 1 }
]
}
}
]
}
再生します。
let haptics = Haptics()
haptics.playHapticsFile("Tap")
EventTypeとEventParametersを設定して様々な触覚を作れます。
パラメータの一覧はこちら
https://developer.apple.com/documentation/corehaptics/chhapticevent
🐣
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com
Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。