circular percentage header

This commit is contained in:
Trey t
2022-02-06 12:00:43 -06:00
parent 587c557e16
commit ca25ddffd5
2 changed files with 61 additions and 5 deletions

View File

@@ -7,12 +7,19 @@
import SwiftUI import SwiftUI
enum PercViewType {
case text
case circular
}
struct HeaderPercView: View { struct HeaderPercView: View {
typealias model = (mood: Mood, total: Int, percent: Float) typealias model = (mood: Mood, total: Int, percent: Float)
var entries = [model]() var entries = [model]()
let backDays: Int let backDays: Int
let type: PercViewType
init(fakeData: Bool, backDays: Int) { init(fakeData: Bool, backDays: Int, type: PercViewType) {
self.type = type
self.backDays = backDays self.backDays = backDays
var moodEntries: [MoodEntry]? var moodEntries: [MoodEntry]?
@@ -48,7 +55,7 @@ struct HeaderPercView: View {
}) })
} }
var body: some View { private var textViews: some View {
VStack { VStack {
Spacer() Spacer()
HStack { HStack {
@@ -73,10 +80,55 @@ struct HeaderPercView: View {
Spacer() Spacer()
} }
} }
private var circularViews: some View {
VStack {
Spacer()
HStack {
ForEach(entries.prefix(3), id: \.0) { model in
Text("\(model.percent, specifier: "%.0f")%")
.font(.title2)
.fontWeight(.bold)
.multilineTextAlignment(.center)
.padding()
.frame(maxWidth: .infinity)
.background(Circle().fill(model.mood.color))
.foregroundColor(Color(UIColor.white))
}
}
Spacer()
HStack {
ForEach(entries.suffix(2), id: \.0) { model in
Text("\(model.percent, specifier: "%.0f")%")
.font(.title2)
.fontWeight(.bold)
.multilineTextAlignment(.center)
.padding()
.frame(maxWidth: .infinity)
.background(Circle().fill(model.mood.color))
.foregroundColor(Color(UIColor.white))
}
}
Spacer()
}
}
var body: some View {
ZStack {
switch self.type {
case .text:
textViews
case .circular:
circularViews
}
}
}
} }
struct HeaderPercView_Previews: PreviewProvider { struct HeaderPercView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
SmallRollUpHeaderView(fakeData: true, backDays: 30) HeaderPercView(fakeData: true, backDays: 30, type: .text)
HeaderPercView(fakeData: true, backDays: 30, type: .circular)
} }
} }

View File

@@ -21,10 +21,14 @@ struct SwitchableView: View {
.opacity(currentViewIdx == 0 ? 1 : 0) .opacity(currentViewIdx == 0 ? 1 : 0)
.allowsHitTesting(false) .allowsHitTesting(false)
HeaderPercView(fakeData: false, backDays: daysBack) HeaderPercView(fakeData: false, backDays: daysBack, type: .circular)
.opacity(currentViewIdx == 1 ? 1 : 0) .opacity(currentViewIdx == 1 ? 1 : 0)
.allowsHitTesting(false) .allowsHitTesting(false)
HeaderPercView(fakeData: false, backDays: daysBack, type: .text)
.opacity(currentViewIdx == 2 ? 1 : 0)
.allowsHitTesting(false)
VStack { VStack {
HStack { HStack {
Spacer() Spacer()
@@ -55,7 +59,7 @@ struct SwitchableView: View {
.padding(.bottom, 30) .padding(.bottom, 30)
.onTapGesture { .onTapGesture {
currentViewIdx += 1 currentViewIdx += 1
if currentViewIdx == 2 { if currentViewIdx == 3 {
currentViewIdx = 0 currentViewIdx = 0
} }
} }