Done Button
Toggleable completion button with smooth checkmark state transition.
SwiftUI Implementation
Pure Vanilla Swift • No DependenciesdoneButton.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 StoreRelated SwiftUI Components
More components in Buttons and related app architectures.
ButtonsiOS 16.0+
Primary Button Basic
High-emphasis prominent action button with standard SwiftUI prominence styling and haptic feedback.
View Component & Code
ButtonsiOS 16.0+
CTA Button Large Basic
Full-width, high-impact call-to-action button designed for onboarding screens, welcome flows, and paywalls.
View Component & Code
ButtonsiOS 16.0+
Secondary Button Basic
Medium-emphasis secondary action button styled for alternative user workflows and dismissal actions.
View Component & Code