Onboarding screens

OnboardingData object that will hold onboarding answers
This commit is contained in:
Trey t
2022-01-22 12:55:12 -06:00
parent 55bcb460ba
commit 1b82f1d05e
9 changed files with 527 additions and 45 deletions

View File

@@ -0,0 +1,86 @@
//
// OnboardingDay.swift
// Feels (iOS)
//
// Created by Trey Tartt on 1/20/22.
//
import SwiftUI
enum DayOptions: String, CaseIterable, RawRepresentable, Codable {
case Today = "Same Day"
case Previous = "Previous Day"
}
struct OnboardingDay: View {
@ObservedObject var onboardingData: OnboardingData
var previewText: String {
switch onboardingData.inputDay {
case .Today:
return "Example: If you pick on a Tuesday, the value will be recorded for Tuesday"
case .Previous:
return "Example: If you pick on a Tuesday, the value will be recorded for Monday, the day before"
}
}
var body: some View {
ZStack {
Image("average", bundle: .main)
.foregroundColor(Color(UIColor.darkText))
.opacity(0.04)
.scaleEffect(1.2)
.padding(.bottom, 55)
ScrollView {
VStack{
Text("Will this rating be for current day or previous day")
.font(.title)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 55)
.padding([.top], 25)
Picker(selection: $onboardingData.inputDay,
label: Text("")) {
ForEach(DayOptions.allCases, id: \.self) { day in
Text(day.rawValue)
}
}
.padding()
.colorScheme(.dark)
.padding([.trailing, .leading], 55)
.pickerStyle(SegmentedPickerStyle())
Text("When you vote your vote will be for the \(onboardingData.inputDay.rawValue)")
.font(.body)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 75)
.padding([.top], 15)
Text(previewText)
.font(.body)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 75)
.padding([.top], 15)
Spacer()
}
}
}
.background(.blue)
}
}
struct OnboardingDay_Previews: PreviewProvider {
static var previews: some View {
Group{
OnboardingDay(onboardingData: OnboardingData())
OnboardingDay(onboardingData: OnboardingData())
.preferredColorScheme(.dark)
}
}
}

View File

@@ -0,0 +1,49 @@
//
// OnboardingMain.swift
// Feels (iOS)
//
// Created by Trey Tartt on 1/20/22.
//
import SwiftUI
struct OnboardingMain: View {
@Environment(\.presentationMode) var presentationMode
@State var onboardingData: OnboardingData
let completionClosure: ((OnboardingData) -> Void)
var body: some View {
TabView {
OnboardingTime(onboardingData: onboardingData)
OnboardingDay(onboardingData: onboardingData)
OnboardingTitle(onboardingData: onboardingData)
OnboardingWrapup(onboardingData: onboardingData, completionClosure: { _ in
completionClosure(onboardingData)
})
}
.ignoresSafeArea()
.tabViewStyle(.page)
.onAppear {
setupAppearance()
}
.interactiveDismissDisabled()
}
func setupAppearance() {
UIPageControl.appearance().currentPageIndicatorTintColor = .white
UIPageControl.appearance().pageIndicatorTintColor = UIColor.black.withAlphaComponent(0.2)
}
}
struct OnboardingMain_Previews: PreviewProvider {
static var previews: some View {
OnboardingMain(onboardingData: OnboardingData(),
completionClosure: { _ in
})
}
}

View File

@@ -0,0 +1,67 @@
//
// OnboardingTime.swift
// Feels (iOS)
//
// Created by Trey Tartt on 1/20/22.
//
import SwiftUI
struct OnboardingTime: View {
@ObservedObject var onboardingData: OnboardingData
var formatter: DateFormatter {
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = .short
return dateFormatter
}
var body: some View {
ZStack {
Image("great", bundle: .main)
.foregroundColor(Color(UIColor.darkText))
.opacity(0.04)
.scaleEffect(1.2)
ScrollView {
VStack {
Text("What time do you want to unlock your rating")
.font(.title)
.padding([.trailing, .leading], 55)
.padding([.top], 25)
.foregroundColor(Color(UIColor.white))
DatePicker("", selection: $onboardingData.date,
displayedComponents: .hourAndMinute)
.scaleEffect(2)
.labelsHidden()
.frame(minWidth: 0, maxWidth: .infinity)
.padding()
.padding([.top, .bottom], 25)
.colorScheme(.dark)
Text("Your shit will be unlocked at \(formatter.string(from: onboardingData.date)) daily")
.font(.body)
.padding([.top], 15)
.padding([.trailing, .leading], 55)
.foregroundColor(Color(UIColor.white))
Spacer()
}
}
}
.background(.green)
}
}
struct OnboardingTime_Previews: PreviewProvider {
static var previews: some View {
Group {
OnboardingTime(onboardingData: OnboardingData())
OnboardingTime(onboardingData: OnboardingData())
.preferredColorScheme(.dark)
}
}
}

View File

@@ -0,0 +1,84 @@
//
// OnboardingTitle.swift
// Feels (iOS)
//
// Created by Trey Tartt on 1/20/22.
//
import SwiftUI
struct OnboardingTitle: View {
static let titleOptions = [
"Its time to select.",
"Pick your shit!",
"How was your day?"]
@ObservedObject var onboardingData: OnboardingData
var body: some View {
ZStack {
Image("average", bundle: .main)
.foregroundColor(Color(UIColor.darkText))
.opacity(0.04)
.scaleEffect(1.2)
.padding(.bottom, 55)
ScrollView {
VStack{
Text("What would you like the reminder to say?")
.font(.title)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 55)
.padding([.top], 25)
ForEach(OnboardingTitle.titleOptions, id: \.self) { option in
Button(action: {
onboardingData.title = option
}, label: {
Text(option)
.font(.system(size: 15))
.fontWeight(.bold)
.foregroundColor(.white)
.padding(10)
.background(RoundedRectangle(cornerRadius: 10).stroke().foregroundColor(Color.white))
.cornerRadius(10)
})
.buttonStyle(PlainButtonStyle())
.padding([.top], 10)
}
Text("-- or type your own--")
.font(.body)
.foregroundColor(Color(UIColor.white))
.padding([.top], 25)
.padding([.trailing, .leading], 55)
TextField("Notification", text: $onboardingData.title)
.frame(height: 44)
.foregroundColor(Color(UIColor.white))
.textFieldStyle(PlainTextFieldStyle())
.padding([.leading, .trailing], 4)
.cornerRadius(16)
.overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.white))
.padding([.leading, .trailing], 75)
.padding([.top], 45)
Spacer()
}
}
}
.background(.orange)
}
}
struct OnboardingTitle_Previews: PreviewProvider {
static var previews: some View {
Group {
OnboardingTitle(onboardingData: OnboardingData())
OnboardingTitle(onboardingData: OnboardingData())
.preferredColorScheme(.dark)
}
}
}

View File

@@ -0,0 +1,107 @@
//
// OnboardingWrapup.swift
// Feels (iOS)
//
// Created by Trey Tartt on 1/21/22.
//
import SwiftUI
struct OnboardingWrapup: View {
@ObservedObject var onboardingData: OnboardingData
let completionClosure: ((OnboardingData) -> Void)
var formatter: DateFormatter {
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = .short
return dateFormatter
}
var body: some View {
ZStack {
Image("good", bundle: .main)
.foregroundColor(Color(UIColor.darkText))
.opacity(0.04)
.scaleEffect(1.2)
.padding(.bottom, 55)
ScrollView {
VStack {
Spacer()
Text("At")
.font(.title)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 55)
.padding([.top], 15)
Text(formatter.string(from: onboardingData.date))
.font(.title)
.fontWeight(.bold)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 55)
.padding([.top], 15)
Text("aou will get notified that")
.font(.title)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 55)
.padding([.top], 15)
Text(onboardingData.title)
.font(.title)
.fontWeight(.bold)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 55)
.padding([.top], 15)
Text("and when you vote it will be counted for the")
.font(.title)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 55)
.padding([.top], 15)
Text(onboardingData.inputDay.rawValue)
.font(.title)
.fontWeight(.bold)
.foregroundColor(Color(UIColor.white))
.padding([.trailing, .leading], 55)
.padding([.top], 15)
Button(action: {
completionClosure(onboardingData)
}, label: {
Text("Complete")
.font(.title)
.fontWeight(.bold)
.foregroundColor(.yellow)
.padding(10)
.padding([.leading, .trailing], 25)
.background(RoundedRectangle(cornerRadius: 10).fill().foregroundColor(Color.white))
.cornerRadius(10)
})
.padding([.top], 65)
}
.multilineTextAlignment(.center)
}
}
.background(.yellow)
}
}
struct OnboardingWrapup_Previews: PreviewProvider {
static var previews: some View {
Group {
OnboardingWrapup(onboardingData: OnboardingData(), completionClosure: { _ in
})
OnboardingWrapup(onboardingData: OnboardingData(), completionClosure: { _ in
})
.preferredColorScheme(.dark)
}
}
}