Autumn Sale50% offCOMPOT
ButtonsFree ComponentiOS 16.0+Xcode 15+

Done Button

Toggleable completion button with smooth checkmark state transition.

SwiftUI Implementation

Pure Vanilla Swift • No Dependencies
doneButton.swift
import Foundation
import SwiftUI
import AVFoundation

/// You can download the success sounds from Pixabay for free: https://pixabay.com/sound-effects/search/success/

/// I used the instructions and the following code from Hacking with Swift to enable the sound: https://www.hackingwithswift.com/forums/swiftui/playing-sound/4921

struct DoneButton: View {
    
    @State private var isDone: Bool = false
    @State var audioPlayer: AVAudioPlayer!
    
    private func playSound(_ soundFileName : String) {
            guard let soundURL = Bundle.main.url(forResource: soundFileName, withExtension: nil) else {
                fatalError("Unable to find \\(soundFileName)")
            }

            do {
                audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
            } catch {
                print(error.localizedDescription)
            }
            audioPlayer.play()
    }
    
    var body: some View {
        
        Button {
            isDone.toggle()
            if isDone {
/// You need to place the file with the sound in your project bundle, see instructions here: https://www.hackingwithswift.com/forums/swiftui/playing-sound/4921
                playSound("success.mp3")
            }
        } label: {
            Image(systemName: isDone ? "checkmark.circle" : "circle")
                .font(.title)
                .fontWeight(.semibold)
                .foregroundStyle(isDone ? .green : .secondary)
                .symbolEffect(.bounce, value: isDone)
                .sensoryFeedback(.success, trigger: isDone)
        }
    }
}

#Preview {
    DoneButton()
}

Ready to copy and paste directly into any Xcode project running iOS 16.0+.

Recommended Use Cases

  • First-run onboarding flows and feature introductions
  • Paywalls, upgrade prompts, and subscription tiers
  • App settings, preferences, and account configuration screens

Component Details

Category
Buttons
iOS Compatibility
iOS 16.0+
Xcode Version
Xcode 15+
Platform
iOS
License Tier
Free
Themes & Contexts
settingsonboardingpaywall
Keywords
buttondonetaskcompletesuccess
C

Compot for iOS

Native SwiftUI playground app

Preview all 130+ components interactively on your device and copy code straight to Xcode with 1 tap.

Get Compot on the App Store