リモコンのイベント取得その2 タッチサーフェスの端のタッチを検知する


GameController.framework

その1で触れた端のタッチ取得、正解はGameController.frameworkを使用するでした!

import GameController

...

    private func observeGCController(force: Bool) {
        if let gc = GCController.controllers().first?.microGamepad {
            gc.reportsAbsoluteDpadValues = true
            gc.dpad.valueChangedHandler = { [weak self] (dpad, _, _) in
                 // dpad.xAxis.value / dpad.yAxis.value で座標を取得できる
            }
        } else {
            if force {
                return
            }
            NotificationCenter.default.addObserver(forName: Notification.Name.GCControllerDidConnect, object: nil, queue: nil, using: { [weak self] _ in
                self?.observeGCController(force: true)
            })
        }
    }

dpad.xAxis.value もしくは dpad.yAxis.value は -1.0から1.0の範囲なので、この値の絶対値が例えば0.8以上なら端っこに指があるということになります。

Game CenterのCapability

なお上の実装でApp Storeに申請するにはGame CenterのCapabilityをONにする必要がありますのでご注意ください。ONにしないとたしかバイナリのアップロードのタイミングでエラーになったと思います。

別にゲームではないアプリでも、問題なく申請は通りました👌

参考