diff --git a/Projects/App/Sources/Navigation/NavigationStack.swift b/Projects/App/Sources/Navigation/NavigationStack.swift index 5dfb3b8..1442fd3 100644 --- a/Projects/App/Sources/Navigation/NavigationStack.swift +++ b/Projects/App/Sources/Navigation/NavigationStack.swift @@ -27,6 +27,11 @@ extension PathType { AuthPhoneVerifyView() case .authAgreement: AuthAgreementView() + + case .authGreeting: + AuthGreetingView() + case .authProfileGender: + AuthProfileGenderInputView() } } } diff --git a/Projects/Core/CommonKit/Sources/Path/PathTypes.swift b/Projects/Core/CommonKit/Sources/Path/PathTypes.swift index 2da273f..7571f51 100644 --- a/Projects/Core/CommonKit/Sources/Path/PathTypes.swift +++ b/Projects/Core/CommonKit/Sources/Path/PathTypes.swift @@ -30,6 +30,9 @@ public enum PathType: Hashable { case .authPhoneInput: return "전화번호 입력" case .authPhoneVerify: return "전화번호 인증" case .authAgreement: return "이용 약관" + + case .authGreeting: return "가입 후 환영" + case .authProfileGender: return "성별 입력" } } } @@ -39,4 +42,7 @@ public enum SignUpSubViewType: Hashable { case authPhoneInput case authPhoneVerify case authAgreement + + case authGreeting + case authProfileGender } diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/Contents.json b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/Contents.json b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/Contents.json new file mode 100644 index 0000000..453c0e5 --- /dev/null +++ b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "female_selected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "female_selected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "female_selected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected.png new file mode 100644 index 0000000..4135824 Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected@2x.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected@2x.png new file mode 100644 index 0000000..b10ba5f Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected@2x.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected@3x.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected@3x.png new file mode 100644 index 0000000..4d9bc31 Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_selected.imageset/female_selected@3x.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/Contents.json b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/Contents.json new file mode 100644 index 0000000..97c1200 --- /dev/null +++ b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "female_unselected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "female_unselected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "female_unselected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected.png new file mode 100644 index 0000000..b884759 Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected@2x.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected@2x.png new file mode 100644 index 0000000..9107824 Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected@2x.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected@3x.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected@3x.png new file mode 100644 index 0000000..f23367e Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/female_unselected.imageset/female_unselected@3x.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/Contents.json b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/Contents.json new file mode 100644 index 0000000..619dcde --- /dev/null +++ b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "male_selected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "male_selected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "male_selected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected.png new file mode 100644 index 0000000..f88d3fa Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected@2x.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected@2x.png new file mode 100644 index 0000000..c706cfe Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected@2x.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected@3x.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected@3x.png new file mode 100644 index 0000000..d0c7107 Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_selected.imageset/male_selected@3x.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/Contents.json b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/Contents.json new file mode 100644 index 0000000..fcaaff7 --- /dev/null +++ b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "male_unselected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "male_unselected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "male_unselected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected.png new file mode 100644 index 0000000..02cbcfe Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected@2x.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected@2x.png new file mode 100644 index 0000000..ec97c40 Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected@2x.png differ diff --git a/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected@3x.png b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected@3x.png new file mode 100644 index 0000000..7c639a1 Binary files /dev/null and b/Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/Gender/male_unselected.imageset/male_unselected@3x.png differ diff --git a/Projects/DesignSystem/DesignCore/Sources/NavigationBar.swift b/Projects/DesignSystem/DesignCore/Sources/NavigationBar.swift index 983932d..dfc18ec 100644 --- a/Projects/DesignSystem/DesignCore/Sources/NavigationBar.swift +++ b/Projects/DesignSystem/DesignCore/Sources/NavigationBar.swift @@ -9,6 +9,7 @@ import SwiftUI private struct NavigationBarViewModifier: ViewModifier { + var showLeftBackButton: Bool = true var handler: () -> Void func body(content: Content) -> some View { @@ -17,20 +18,30 @@ private struct NavigationBarViewModifier: ViewModifier { .toolbar(.visible, for: .navigationBar) .toolbarTitleDisplayMode(.inline) .toolbar { - ToolbarItem(placement: .topBarLeading) { - Button { - handler() - } label: { - DesignCore.Images.leftArrow.image + if showLeftBackButton { + ToolbarItem(placement: .topBarLeading) { + Button { + handler() + } label: { + DesignCore.Images.leftArrow.image + } + } - } } } } public extension View { - func setNavigation(handler: @escaping () -> Void) -> some View { - return modifier(NavigationBarViewModifier(handler: handler)) + func setNavigation( + showLeftBackButton: Bool = true, + handler: @escaping () -> Void + ) -> some View { + return modifier( + NavigationBarViewModifier( + showLeftBackButton: showLeftBackButton, + handler: handler + ) + ) } } diff --git a/Projects/Features/SignUp/Sources/AuthAgreement/AuthAgreementView.swift b/Projects/Features/SignUp/Sources/AuthAgreement/AuthAgreementView.swift index 12100ab..06ad395 100644 --- a/Projects/Features/SignUp/Sources/AuthAgreement/AuthAgreementView.swift +++ b/Projects/Features/SignUp/Sources/AuthAgreement/AuthAgreementView.swift @@ -13,8 +13,6 @@ import CommonKit public struct AuthAgreementView: View { - @State var isShowAlert = false - public init() {} public var body: some View { @@ -30,10 +28,9 @@ public struct AuthAgreementView: View { Spacer() CTABottomButton(title: "다음") { - isShowAlert = true - } - .alert("끝!!", isPresented: $isShowAlert) { - + AppCoordinator.shared.push( + .signUp(.authGreeting) + ) } } .ignoresSafeArea(.all) diff --git a/Projects/Features/SignUp/Sources/ProfileInput/AuthGreeting/AuthGreetingView.swift b/Projects/Features/SignUp/Sources/ProfileInput/AuthGreeting/AuthGreetingView.swift new file mode 100644 index 0000000..838a1e8 --- /dev/null +++ b/Projects/Features/SignUp/Sources/ProfileInput/AuthGreeting/AuthGreetingView.swift @@ -0,0 +1,53 @@ +// +// AuthGreetingView.swift +// DesignPreview +// +// Created by 김지수 on 10/1/24. +// Copyright © 2024 com.weave. All rights reserved. +// + +import SwiftUI +import CommonKit +import DesignCore + +public struct AuthGreetingView: View { + @State var isAppeared = false + + public init() {} + + public var body: some View { + VStack { + Text("만나서 반가워요!\n당신이 어떤 사람인지 알려주세요.") + .typography(.semibold_24) + .multilineTextAlignment(.center) + .foregroundStyle(DesignCore.Colors.grey500) + .opacity(isAppeared ? 1.0 : 0.0) + .offset(y: isAppeared ? 0 : -24) + + Spacer() + + CTAButton(title: "알려주러 가기") { + AppCoordinator.shared.push( + .signUp(.authProfileGender) + ) + } + .padding(.horizontal, 24) + .opacity(isAppeared ? 1.0 : 0.0) + .offset(y: isAppeared ? 0 : -24) + + Spacer() + } + .ignoresSafeArea() + .padding(.top, 155) + .textureBackground() + .onAppear { + withAnimation(.easeInOut(duration: 0.6)) { + isAppeared = true + } + } + } +} + +#Preview { + AuthGreetingView() +} diff --git a/Projects/Features/SignUp/Sources/ProfileInput/AuthProfileGenderInput/AuthProfileGenderInputView.swift b/Projects/Features/SignUp/Sources/ProfileInput/AuthProfileGenderInput/AuthProfileGenderInputView.swift new file mode 100644 index 0000000..50e4402 --- /dev/null +++ b/Projects/Features/SignUp/Sources/ProfileInput/AuthProfileGenderInput/AuthProfileGenderInputView.swift @@ -0,0 +1,88 @@ +// +// AuthProfileGenderInputView.swift +// DesignPreview +// +// Created by 김지수 on 10/1/24. +// Copyright © 2024 com.weave. All rights reserved. +// + +import SwiftUI +import DesignCore +import CommonKit + +enum GenderType: CaseIterable { + case male + case female + + var unselectedImage: Image { + switch self { + case .male: DesignCore.Images.maleUnselected.image + case .female: DesignCore.Images.femaleUnselected.image + } + } + + var selectedImage: Image { + switch self { + case .male: DesignCore.Images.maleSelected.image + case .female: DesignCore.Images.femaleSelected.image + } + } +} + +public struct AuthProfileGenderInputView: View { + @State var selectedGender: GenderType? + + public init() {} + + public var body: some View { + VStack { + ProfileInputTemplatedView( + currentPage: 1, + maxPage: 5, + subMessage: "만나서 반가워요!", + mainMessage: "당신의 성별은 무엇인가요?" + ) { + HStack(spacing: 0) { + Spacer() + ForEach(GenderType.allCases, id: \.self) { type in + if selectedGender == type { + type.selectedImage + .resizable() + .frame(width: 130, height: 130) + } else { + type.unselectedImage + .resizable() + .frame(width: 130, height: 130) + .onTapGesture { + withAnimation { + selectedGender = type + } + } + } + } + Spacer() + } + } + + Spacer() + + CTABottomButton( + title: "다음", + isActive: selectedGender != nil + ) { + + } + } + .padding(.top, 10) + .textureBackground() + .setNavigation(showLeftBackButton: false) { + + } + } +} + +#Preview { + NavigationView { + AuthProfileGenderInputView() + } +} diff --git a/Projects/Features/SignUp/Sources/ProfileInput/ProfileInputTemplatedView.swift b/Projects/Features/SignUp/Sources/ProfileInput/ProfileInputTemplatedView.swift new file mode 100644 index 0000000..65932be --- /dev/null +++ b/Projects/Features/SignUp/Sources/ProfileInput/ProfileInputTemplatedView.swift @@ -0,0 +1,51 @@ +// +// ProfileInputTemplatedView.swift +// DesignPreview +// +// Created by 김지수 on 10/1/24. +// Copyright © 2024 com.weave. All rights reserved. +// + +import SwiftUI +import DesignCore + +struct ProfileInputTemplatedView: View { + + let currentPage: Int + let maxPage: Int + let subMessage: String + let mainMessage: String + @ViewBuilder var contentView: () -> ContentView + + var body: some View { + VStack(alignment: .leading, spacing: 20) { + HStack(spacing: 0) { + Text("\(currentPage)") + .foregroundStyle(DesignCore.Colors.blue300) + Text("/\(maxPage)") + .foregroundStyle(DesignCore.Colors.grey300) + } + .padding(.horizontal, 10) + .padding(.vertical, 2) + .background { + Capsule() + .foregroundStyle(.white) + } + .typography(.regular_15) + .padding(.horizontal, 26) + + VStack(spacing: 0) { + LeftAlignText(subMessage) + .typography(.regular_14) + .foregroundStyle(DesignCore.Colors.grey200) + LeftAlignText(mainMessage) + .typography(.semibold_24) + .foregroundStyle(DesignCore.Colors.grey500) + } + .padding(.horizontal, 26) + + contentView() + .padding(.horizontal, 26) + } + } +}