0
3

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-02-13

タップ時にデバイスがふるえる機能の追加方法です

2000928.png

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

方法

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

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関連の情報を発信しています。

Twitter
Medium

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3