Swift: how to use 3D Touch - Introduction
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
HapticWith3dTouch.xcodeproj initial commit Feb 2, 2017
HapticWith3dTouch initial commit Feb 2, 2017
README.md added readme Feb 2, 2017



Swift: how to use 3D Touch - Introduction

3D Touch or force touch - this is anew feature that have been introduced in the iPhone 6s. It's interesting to know that you can get touch force, it is a number from 0 up to 6.6667, actually it a number from 0 up to maximumPossibleForce.

Let's take a look at how to check if 3d touch is supported on current device:

func is3dTouchAvailable(traitCollection: UITraitCollection) -> Bool {
    return traitCollection.forceTouchCapability == UIForceTouchCapability.available

// Let's call it somewhere from the GameScene for instance
override func didMove(to view: SKView) {

    if(is3dTouchAvailable(traitCollection: self.view!.traitCollection)) {

Feel free to take a look at the example project - I'll provide the link in the end of this post. So this is a good practice to check whether 3d touch is supported or not.

Here's an example of how to get the force of the 3d touch

func touchMoved(touch: UITouch, toPoint pos: CGPoint) {
    let location = touch.location(in: self)
    let node = self.atPoint(location)
    if is3dTouchEnabled {
        bubble.setPressure(pressurePercent: touch.force / touch.maximumPossibleForce)
    } else {
        // It is important to use touchMoved for iPhones w/o 3dTouch,
        // So we can "emulate" it.
        bubble.setPressure(pressurePercent: 1)

The current value of the Touch's force is touch.force and the touch.maximumPossibleForce is a good one to convert force value to the "percentage". This code is from the small example of how to "emulate" the bubble reacting on the force of the touch.