iPhoneの動作時のブルっという触覚効果をさっと作りたい　とりあえずの構成

#タップ時にデバイスがふるえる機能の追加方法です
![2000928.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/2ef9b944-c0ea-b141-5c88-e40354d378ba.png)

#なるべく少ない設定で触覚をつけたい

#方法

触覚用のクラスを作ります。
よかったらコピペで使ってください。

```swift
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")
        }
    }
}
```

ハプティクスファイルを作ります。

```ahap: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 }
                ]
            }
        }
    ]
}
```

再生します。

```swift
let haptics = Haptics()

haptics.playHapticsFile("Tap")
```


EventTypeとEventParametersを設定して様々な触覚を作れます。

パラメータの一覧はこちら
https://developer.apple.com/documentation/corehaptics/chhapticevent

🐣
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習／AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)