3DTouchを検出してみよう


内容

3DTouchの生データを取得して、利用してみよう。

用意するもの

  • iPhone6s/iPhone6s plusのいずれか
  • Xcode7.0.1
  • 実機動作環境

3DTouchとは

あなたがディスプレイに加えた圧力の大きさを、iPhoneが初めて感知するようになったのです。
- apple
要するに、画面をどれくらい強く押しているか分かるようになりました。

押している強さを取得してみよう

画面を押している強さは、UITouchのプロパティとして追加されました。

forceと、maximumPossibleForceです。

forceは画面を押している強さ
そして、maximumPossibleForceは画面を押した際に感知できる最大値です。

まずは、UITouchはtouchesMovedで取得するのが良いでしょう。

ViewController.swift

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let touch = touches.first
        let force = (touch?.force)!/(touch?.maximumPossibleForce)!
        print(force)
    }

touchesMovedは複数のUITouchを引数としています。
これは画面を複数の指でタッチした際に感知するためです。
今回は1つの指だけで良いので、touchesセットから最初のtouchを抜き出します。

次に(touch?.force)!/(touch?.maximumPossibleForce)!という計算式が出てきました。
これは、強さ/最大値という計算式になっておりタッチの強さを0.0~1.0の間で扱えるように変換しています。
こうすることで、ディスプレイの品質や劣化によってmaximumPossibleForceが変化した場合も全てのデバイスで同様にタッチの強さを扱うことが出来ます。

上記のコードを実行して、iPhoneの画面を強く押してみましょう。

0.418749993760139
0.490624992689118
0.568749991524965
0.649999990314245
0.737499989010394
0.83124998761341
0.921874986262992
1.0
1.0

このように、強くおした時は1.0その間は0.xを指します。
離した際は必ず0.0になるわけではないので、その処理を使う場合はtouchesEndedを通すのが良いです。