feat(ios): pulse settings indicator

This commit is contained in:
Peter Steinberger
2025-12-14 00:48:09 +00:00
parent ffc57d5f20
commit 862a490038

View File

@@ -2,6 +2,7 @@ import SwiftUI
struct RootTabs: View {
@EnvironmentObject private var appModel: NodeAppModel
@State private var isConnectingPulse: Bool = false
var body: some View {
TabView {
@@ -27,12 +28,18 @@ struct RootTabs: View {
radius: self.settingsIndicatorGlowRadius,
x: 0,
y: 0)
.scaleEffect(self.settingsIndicatorScale)
.opacity(self.settingsIndicatorOpacity)
.offset(x: 7, y: -2)
}
Text("Settings")
}
}
}
.onAppear { self.updateConnectingPulse(for: self.bridgeIndicatorState) }
.onChange(of: self.bridgeIndicatorState) { _, newValue in
self.updateConnectingPulse(for: newValue)
}
}
private enum BridgeIndicatorState {
@@ -74,9 +81,31 @@ struct RootTabs: View {
case .connected:
6
case .connecting:
4
self.isConnectingPulse ? 6 : 3
case .disconnected:
0
}
}
private var settingsIndicatorScale: CGFloat {
guard self.bridgeIndicatorState == .connecting else { return 1 }
return self.isConnectingPulse ? 1.12 : 0.96
}
private var settingsIndicatorOpacity: Double {
guard self.bridgeIndicatorState == .connecting else { return 1 }
return self.isConnectingPulse ? 1.0 : 0.75
}
private func updateConnectingPulse(for state: BridgeIndicatorState) {
guard state == .connecting else {
withAnimation(.easeOut(duration: 0.2)) { self.isConnectingPulse = false }
return
}
guard !self.isConnectingPulse else { return }
withAnimation(.easeInOut(duration: 0.9).repeatForever(autoreverses: true)) {
self.isConnectingPulse = true
}
}
}