From 578a526560050d8818ec4bd486a2c31c2850352b Mon Sep 17 00:00:00 2001 From: Dennis Schmidt Date: Fri, 3 Mar 2023 10:57:14 +0800 Subject: [PATCH] tmp illustration for #61 --- .../SwiftUIExample/SwiftUIExampleView.swift | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/Example/DSWaveformImageExample-iOS/SwiftUIExample/SwiftUIExampleView.swift b/Example/DSWaveformImageExample-iOS/SwiftUIExample/SwiftUIExampleView.swift index 98770d1..b10d67a 100644 --- a/Example/DSWaveformImageExample-iOS/SwiftUIExample/SwiftUIExampleView.swift +++ b/Example/DSWaveformImageExample-iOS/SwiftUIExample/SwiftUIExampleView.swift @@ -54,6 +54,9 @@ struct SwiftUIExampleView: View { .padding(.vertical, 20) } + @State var progress: Double = 0 + let timer = Timer.publish(every: 0.2, on: .main, in: .common).autoconnect() + @available(iOS 15.0, *) @ViewBuilder private var recordingExample: some View { @@ -85,11 +88,30 @@ struct SwiftUIExampleView: View { .padding() if let audioURL { - WaveformView( - audioURL: audioURL, - configuration: configuration, - renderer: CircularWaveformRenderer(kind: .ring(0.7)) + let configuration: Waveform.Configuration = .init( + style: .striped(.init(color: .gray, width: 1, spacing: 2)) ) + + GeometryReader { proxy in + ZStack(alignment: .leading) { + // Static waveform view, showing the whole file + WaveformView(audioURL: audioURL, configuration: configuration) + .frame(width: proxy.size.width) + + // Animated progress indicator, masked to the same waveformView, to show the progress + let width = min(progress * proxy.size.width, proxy.size.width) + Rectangle() + .frame(width: width) + .foregroundColor(.blue) + .mask(alignment: .leading) { + WaveformView(audioURL: audioURL, configuration: configuration) + .frame(width: proxy.size.width) + } + .animation(.linear, value: progress) + } + }.onReceive(timer) { _ in + self.progress = (self.progress + 0.02).truncatingRemainder(dividingBy: 1) + } } VStack {