Haptic Feedback with Sound in SwiftUI – sensoryFeedback

In my previous tutorial, I explained how to use .sensoryFeedback in SwiftUI. Now, in this tutorial, I will show you how we can add sound effect along with haptic effect.

Unfortunately till now, SwiftUI has no built-in feature to produce sound along with sensoryFeedback. But I think this is fair enough because we can always add sound effects using AVFoundation.

However, on their official documentation, I found a line saying that it would produce haptic or sound feedback. But I never figured out how to do that using sensoryFeedback.

Some may find this post as a misleading title as I am going to use AVFoundation here, but right now I only find this as a working solution for me. If you find a better option you can write that in the comment section below.

Let’s start by creating a simple Button and on button press it will produce haptic feedback.

import SwiftUI

struct ContentView: View {
    @State private var myValue = 0
    
    var body: some View {
        Button("You pressed me \(myValue) times"){
            myValue = myValue + 1
        }
        .sensoryFeedback(.impact(weight: .light, intensity: 1), trigger: myValue)
    }
}

Now it’s time to add a sound effect with that button.

First, we will need to add this line to import AVFoundation

import AVFoundation

For playing system sounds we can use this:

AudioServicesPlaySystemSound(audio_id)

Play sound with haptic feedback in SwiftUI

Let’s see an example:

import SwiftUI
import AVFoundation
struct ContentView: View {
    @State private var myValue = 0
    
    var body: some View {
        Button("You pressed me \(myValue) times"){
            myValue = myValue + 1

            AudioServicesPlaySystemSound(1104)
        }
        .sensoryFeedback(.impact(weight: .light, intensity: 1), trigger: myValue)
    }
}

This will produce the keypad pressing sound effect with haptic feedback.

If you wish to find a list of all the sounds you can check this:

https://iphonedev.wiki/AudioServices

You can get almost every type of sound effects from that list.

AudioServicesPlaySystemSound(1104) this will produce the exact same sound as keypad pressing in iPhone default keyboard.

Leave a Reply

Your email address will not be published. Required fields are marked *