Mercurial > public > lazybear
diff LazyBear/HapticsManager.swift @ 319:62d278295bb7
Sign Up View implemented
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Sat, 27 Mar 2021 20:26:15 +0100 |
parents | |
children | 37c13ebda381 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LazyBear/HapticsManager.swift Sat Mar 27 20:26:15 2021 +0100 @@ -0,0 +1,55 @@ +// +// HapticsManager.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 27/3/21. +// + +import SwiftUI +import CoreHaptics + +class HapticsManager: ObservableObject { + @Published var engine: CHHapticEngine? + + func prepareHaptics() { + guard CHHapticEngine.capabilitiesForHardware().supportsHaptics else { return } + + do { + self.engine = try CHHapticEngine() + try engine?.start() + } catch { + print("There was an error creating the engine: \(error.localizedDescription)") + } + } + + func simpleSuccess() { + let generator = UINotificationFeedbackGenerator() + generator.notificationOccurred(.success) + } + + func complexSuccess() { + // make sure that the device supports haptics + guard CHHapticEngine.capabilitiesForHardware().supportsHaptics else { return } + var events = [CHHapticEvent]() + + // create one intense, sharp tap + let intensity = CHHapticEventParameter(parameterID: .hapticIntensity, value: 2) + let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness, value: 1) + let event = CHHapticEvent(eventType: .hapticTransient, parameters: [intensity, sharpness], relativeTime: 0) + events.append(event) + + // convert those events into a pattern and play it immediately + do { + let pattern = try CHHapticPattern(events: events, parameters: []) + let player = try engine?.makePlayer(with: pattern) + try player?.start(atTime: 0) + } catch { + print("Failed to play pattern: \(error.localizedDescription).") + } + } + + func simpleError() { + let generator = UINotificationFeedbackGenerator() + generator.notificationOccurred(.error) + } +}