Skip to content

Commit

Permalink
Haptics for buttons (#224)
Browse files Browse the repository at this point in the history
  • Loading branch information
mfikes authored Jan 28, 2024
1 parent f13c24f commit f99536f
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 8 deletions.
8 changes: 4 additions & 4 deletions Impedance Converter/Impedance Converter/ButtonView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,13 @@ struct ButtonView: View {
.onChanged({ _ in
if (!self.isPressed) {
self.isPressed = true
Haptics.shared.playHapticFeedback(for: self.isPressed)
Haptics.shared.playButtonHapticFeedback(for: self.isPressed)
action()
}
})
.onEnded({ _ in
self.isPressed = false
Haptics.shared.playHapticFeedback(for: self.isPressed)
Haptics.shared.playButtonHapticFeedback(for: self.isPressed)
})
)
}
Expand Down Expand Up @@ -126,13 +126,13 @@ struct ToggleButtonView: View {
.onChanged({ _ in
if (!self.isPressed) {
self.isPressed = true
Haptics.shared.playHapticFeedback(for: self.isPressed)
Haptics.shared.playButtonHapticFeedback(for: self.isPressed)
self.isOn.toggle()
}
})
.onEnded({ _ in
self.isPressed = false
Haptics.shared.playHapticFeedback(for: self.isPressed)
Haptics.shared.playButtonHapticFeedback(for: self.isPressed)
})
)
}
Expand Down
14 changes: 11 additions & 3 deletions Impedance Converter/Impedance Converter/Haptics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,20 @@ class Haptics {
}
}

func playHapticFeedback(for on: Bool) {
private func playHapticFeedback(for on: Bool, sharpnessOn: Float, sharpnessOff: Float) {
guard CHHapticEngine.capabilitiesForHardware().supportsHaptics else { return }

var events = [CHHapticEvent]()
if on {
// Create a sharp, strong tap
let intensity = CHHapticEventParameter(parameterID: .hapticIntensity, value: 1.0) // Strong intensity
let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness, value: 1.0) // Sharp feel
let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness, value: sharpnessOn) // Sharp feel
let event = CHHapticEvent(eventType: .hapticTransient, parameters: [intensity, sharpness], relativeTime: 0)
events.append(event)
} else {
// Create a softer, less sharp tap
let intensity = CHHapticEventParameter(parameterID: .hapticIntensity, value: 0.8) // Softer intensity
let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness, value: 0.5) // Less sharp feel
let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness, value: sharpnessOff) // Less sharp feel
let event = CHHapticEvent(eventType: .hapticTransient, parameters: [intensity, sharpness], relativeTime: 0)
events.append(event)
}
Expand All @@ -69,4 +69,12 @@ class Haptics {
print("Failed to play haptic feedback: \(error)")
}
}

func playConstraintHapticFeedback(for on: Bool) {
playHapticFeedback(for: on, sharpnessOn: 1.0, sharpnessOff: 0.6)
}

func playButtonHapticFeedback(for on: Bool) {
playHapticFeedback(for: on, sharpnessOn: 0.4, sharpnessOff: 0.4)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ struct SmithChartContentView: View {
}

private func playHapticsFor(constraintEnabled: Bool) {
Haptics.shared.playHapticFeedback(for: constraintEnabled)
Haptics.shared.playConstraintHapticFeedback(for: constraintEnabled)
}
}

Expand Down

0 comments on commit f99536f

Please sign in to comment.