From acc9f8631545cade801ca081899fd8c48979d1a7 Mon Sep 17 00:00:00 2001 From: Isaac Greene Date: Fri, 17 Jun 2022 16:38:15 -0400 Subject: [PATCH] Added km/hr and mi/hr. Did some formatting stuff. --- Splits.xcodeproj/project.pbxproj | 8 +++-- Splits/ChangeLogData.swift | 13 +++++++ Splits/ChangeLogView.swift | 16 ++++----- Splits/ContentView.swift | 61 ++++++++++++++++++++++++-------- Splits/DocsView.swift | 4 +-- 5 files changed, 76 insertions(+), 26 deletions(-) diff --git a/Splits.xcodeproj/project.pbxproj b/Splits.xcodeproj/project.pbxproj index 3f27d33..91bcfeb 100644 --- a/Splits.xcodeproj/project.pbxproj +++ b/Splits.xcodeproj/project.pbxproj @@ -339,6 +339,8 @@ DEVELOPMENT_TEAM = UQJ7U8R2CV; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Splits/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Paces; INFOPLIST_KEY_NSFaceIDUsageDescription = "We'll need authentication before we can show sensitive data"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -353,7 +355,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.0; - PRODUCT_BUNDLE_IDENTIFIER = Brandlar.Splits; + PRODUCT_BUNDLE_IDENTIFIER = Brandlar.Paces; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; RUN_DOCUMENTATION_COMPILER = YES; @@ -375,6 +377,8 @@ DEVELOPMENT_TEAM = UQJ7U8R2CV; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Splits/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Paces; INFOPLIST_KEY_NSFaceIDUsageDescription = "We'll need authentication before we can show sensitive data"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -389,7 +393,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.0; - PRODUCT_BUNDLE_IDENTIFIER = Brandlar.Splits; + PRODUCT_BUNDLE_IDENTIFIER = Brandlar.Paces; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; RUN_DOCUMENTATION_COMPILER = YES; diff --git a/Splits/ChangeLogData.swift b/Splits/ChangeLogData.swift index e06a47f..1c06ce9 100644 --- a/Splits/ChangeLogData.swift +++ b/Splits/ChangeLogData.swift @@ -10,6 +10,19 @@ import SwiftUI struct June2022: View { var body: some View { ScrollView { + //2022-06-16 + HStack { + VStack (alignment: .leading) { + Text("2022-06-17") + .font(.title2) + Text("Version Release Candidate 4\n") + .font(.footnote) + Text("\u{2022} Added km/hr and mi/hr\n\u{2022} Did some formatting with the stuff\n\u{2022} Added Back and Next buttons") + } + Spacer() + } + .padding(30) + //2022-06-16 HStack { VStack (alignment: .leading) { diff --git a/Splits/ChangeLogView.swift b/Splits/ChangeLogView.swift index 0f19134..dbb5774 100644 --- a/Splits/ChangeLogView.swift +++ b/Splits/ChangeLogView.swift @@ -15,15 +15,15 @@ import SwiftUI struct ChangeLog: View { var body: some View { List { - Section(header: Text("2022")) { - NavigationLink("June", destination: June2022()) - NavigationLink("May", destination: May2022()) - NavigationLink("April", destination: April2022()) - NavigationLink("March", destination: March2022()) - } + Section(header: Text("2022")) { + NavigationLink("June", destination: June2022()) + NavigationLink("May", destination: May2022()) + NavigationLink("April", destination: April2022()) + NavigationLink("March", destination: March2022()) } - .listStyle(.insetGrouped) - .navigationTitle("Change Log") + } + .listStyle(.insetGrouped) + .navigationTitle("Change Log") } } struct ChangeLog_Previews: PreviewProvider { diff --git a/Splits/ContentView.swift b/Splits/ContentView.swift index c714a5e..c9a0fb5 100644 --- a/Splits/ContentView.swift +++ b/Splits/ContentView.swift @@ -50,6 +50,17 @@ struct ContentView: View { timeSeconds = "" } Spacer() + Button("Back") { + if focusedField == .distance { + focusedField = nil + } else if focusedField == .hours { + focusedField = .distance + } else if focusedField == .minutes { + focusedField = .hours + } else { + focusedField = .minutes + } + } Button("Next") { if focusedField == .distance { focusedField = .hours @@ -112,6 +123,7 @@ struct ContentView: View { } PaceResults(timeHours: $timeHours, timeMinutes: $timeMinutes, timeSeconds: $timeSeconds, selectedSystem: $selectedSystem, distance: $distance) } + .frame(maxWidth: 700) } } } @@ -181,6 +193,8 @@ struct PaceResults: View { return actualTime / distanceDub }() + let paceOpposite = (selectedSystem == "km" ? (pace * 1.609344) : (pace * 0.6213711922)) + let paceFormatted:String = { let paceSeconds = pace.truncatingRemainder(dividingBy: 1.0) let paceMinutes = (pace.truncatingRemainder(dividingBy: 60.0) - paceSeconds) @@ -191,7 +205,6 @@ struct PaceResults: View { }() let paceFormattedOpposite:String = { - let paceOpposite = (selectedSystem == "km" ? (pace * 1.609344) : (pace * 0.6213711922)) let paceSecondsOpposite = paceOpposite.truncatingRemainder(dividingBy: 1.0) let paceMinutesOpposite = (paceOpposite.truncatingRemainder(dividingBy: 60.0) - paceSecondsOpposite) let paceHoursOpposite = String(format: "%.0f", ((paceOpposite - paceMinutesOpposite) / 60)) @@ -214,22 +227,42 @@ struct PaceResults: View { // zeros to them, so that 5 minutes 7 seconds will show // as 05:07 which is a format most people, and certainly // the people this app is intended for, will understand - - HStack { - VStack (alignment: .leading) { - Text("\(roundString(Double(removeLeadingZeros(distance: &distance)) ?? 0))\(selectedSystem)") - Text("\(convertedDistanceString)\(notSelectedSystem)") - } - .frame(minWidth: 100) - Text("\(hoursFormatted):\(leadingZeros)") - .padding() + + let pacePerHour: String = { + let pph = 60 / pace + return (pace != 0 ? String(format: "%.2f", pph) : "0") + }() + + let pacePerHourOpposite: String = { + let npph = 60 / paceOpposite + return (pace != 0 ? String(format: "%.2f", npph) : "0") + }() + + VStack { + HStack { + Text("\(hoursFormatted):\(leadingZeros)") + .padding() + .frame(minWidth: 100) + VStack (alignment: .leading) { + Text("\(roundString(Double(removeLeadingZeros(distance: &distance)) ?? 0))\(selectedSystem)") + Text("\(convertedDistanceString)\(notSelectedSystem)") + } + .frame(minWidth: 100) + } + HStack { + VStack(alignment: .leading) { + Text("\(paceFormatted)/\(selectedSystem)") + Text("\(paceFormattedOpposite)/\(notSelectedSystem)") + } + .frame(minWidth: 100) + VStack(alignment: .leading) { + Text("\(pacePerHour) \(selectedSystem)/hr") + Text("\(pacePerHourOpposite) \(notSelectedSystem)/hr") + } .frame(minWidth: 100) - VStack(alignment: .trailing) { - Text("\(paceFormatted)/\(selectedSystem)") - Text("\(paceFormattedOpposite)/\(notSelectedSystem)") } - .frame(minWidth: 100) } + .padding() } func removeLeadingZeros(distance: inout String) -> String { while distance.starts(with: "0") { diff --git a/Splits/DocsView.swift b/Splits/DocsView.swift index e73e797..a9d3445 100644 --- a/Splits/DocsView.swift +++ b/Splits/DocsView.swift @@ -62,8 +62,8 @@ struct DocsView: View { } Section(header: Text("App Information")) { NavigationLink("Software License", destination: LicenseView()) - Text("Version: Release Candidate 3") - Text("Release date: 2022-06-16") + Text("Version: Release Candidate 4") + Text("Release date: 2022-06-17") Text("Start date: 2022-03-25") Link("Built with SwiftUI \(Image(systemName: "swift"))", destination: URL(string: "https://developer.apple.com/xcode/swiftui")!) }