From 5dd97c5da32ae6aa4ec17c210724921055d6db88 Mon Sep 17 00:00:00 2001 From: giljihun Date: Wed, 28 Jan 2026 12:47:15 +0900 Subject: [PATCH 1/6] =?UTF-8?q?style:=20=EC=BB=A4=EB=A7=88=EB=B7=B0=20-=20?= =?UTF-8?q?=EC=9C=A0=EB=A3=8C=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기존 3가지 아이콘에서 유료아이콘 1개로 통일 --- .../TemplatePreviewComponents.swift | 2 +- .../Shared/Views/EffectSelectorView.swift | 56 +------------------ 2 files changed, 3 insertions(+), 55 deletions(-) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Components/TemplatePreviewComponents.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Components/TemplatePreviewComponents.swift index 10c73c696..81c44f8fa 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Components/TemplatePreviewComponents.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Components/TemplatePreviewComponents.swift @@ -323,7 +323,7 @@ extension TemplatePreviewBody { .foregroundColor(.black) } .padding(.horizontal, 16) - .padding(.vertical, 12.5) + .padding(.vertical, 10.5) } .buttonStyle(.plain) .glassEffect(.regular.interactive(), in: .capsule) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/EffectSelectorView.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/EffectSelectorView.swift index ef8316325..615e389fc 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/EffectSelectorView.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/EffectSelectorView.swift @@ -267,33 +267,7 @@ struct EffectSelectorView: View { HStack(spacing: 4) { // 유료 아이콘 if !sound.isFree { - if isOwned { - // 유료 + 보유 - if isSelected { - Image(.whiteEffectSelect) - .resizable() - .scaledToFit() - .frame(width: 18, height: 18) - } else { - Image(.grayEffectSelect) - .resizable() - .scaledToFit() - .frame(width: 18, height: 18) - } - } else { - // 유료 + 미보유 - if isSelected { - Image(.whiteEffectSelect) - .resizable() - .scaledToFit() - .frame(width: 18, height: 18) - } else { - Image(.gradientEffectSelect) - .resizable() - .scaledToFit() - .frame(width: 18, height: 18) - } - } + Image(.myCoinMini) } Text(sound.soundName) @@ -441,33 +415,7 @@ struct EffectSelectorView: View { HStack(spacing: 4) { // 유료 아이콘 if !particle.isFree { - if isOwned { - // 유료 + 보유 - if isSelected { - Image(.whiteEffectSelect) - .resizable() - .scaledToFit() - .frame(width: 18, height: 18) - } else { - Image(.grayEffectSelect) - .resizable() - .scaledToFit() - .frame(width: 18, height: 18) - } - } else { - // 유료 + 미보유 - if isSelected { - Image(.whiteEffectSelect) - .resizable() - .scaledToFit() - .frame(width: 18, height: 18) - } else { - Image(.gradientEffectSelect) - .resizable() - .scaledToFit() - .frame(width: 18, height: 18) - } - } + Image(.myCoinMini) } Text(particle.particleName) From 7bbc537dcb203b737d2d0aa875842b9ef785fc51 Mon Sep 17 00:00:00 2001 From: giljihun Date: Wed, 28 Jan 2026 12:47:42 +0900 Subject: [PATCH 2/6] =?UTF-8?q?style:=20=EC=BB=A4=EB=A7=88=EB=B7=B0=20-=20?= =?UTF-8?q?=EC=8B=9C=ED=8A=B8=20=ED=95=98=EC=9D=B4=ED=8C=8C=EC=9D=B4=20?= =?UTF-8?q?=EC=9E=AC=EC=A1=B0=EC=A0=95=20(=EC=95=84=EC=9D=B4=EC=BD=98=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=93=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...KeyringCustomizingView+PurchaseSheet.swift | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringCustomizingView+PurchaseSheet.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringCustomizingView+PurchaseSheet.swift index e7172cc5b..e35ac8baf 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringCustomizingView+PurchaseSheet.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringCustomizingView+PurchaseSheet.swift @@ -31,7 +31,7 @@ extension KeyringCustomizingView { /// 장바구니 리스트 (스크롤 가능) ScrollView { - VStack(spacing: 12) { + VStack(spacing: 20) { ForEach(cartItems) { item in purchaseItemRow(item: item) } @@ -43,7 +43,7 @@ extension KeyringCustomizingView { Spacer() // 내 보유 포인트 - HStack(spacing: 4) { + HStack(spacing: 6) { Text("내 보유 :") .typography(.suit15M25) .foregroundStyle(.black100) @@ -51,8 +51,9 @@ extension KeyringCustomizingView { Text("\(UserManager.shared.currentUser?.coin ?? 0)") .typography(.nanum16EB) .foregroundStyle(.main500) + .padding(.top, 2) } - .padding(.bottom, 16) + .padding(.bottom, 7) // 구매 버튼 purchaseButton @@ -80,23 +81,23 @@ extension KeyringCustomizingView { /// 구매 아이템 Row private func purchaseItemRow(item: EffectItem) -> some View { HStack(spacing: 0) { - // 아이콘 (유료 표시) - Image(.mainEffectSelect) - .padding(.trailing, 6) - // 아이템 이름 Text(item.name) - .typography(.suit17B) + .typography(.suit16B) .foregroundStyle(.black100) .padding(.trailing, 6) // 타입 표시 Text(item.type.rawValue) - .typography(.suit12M) + .typography(.suit13M) .foregroundStyle(.gray400) Spacer() + // 아이콘 (유료 표시) + Image(.myCoinMini) + .padding(.trailing, 5) + // 가격 Text("\(item.price)") .typography(.nanum16EB) From 326e00b8cb5f9179474f1341d7a99158161258a7 Mon Sep 17 00:00:00 2001 From: giljihun Date: Wed, 28 Jan 2026 12:47:51 +0900 Subject: [PATCH 3/6] =?UTF-8?q?style:=20=EC=BB=A4=EB=A7=88=EB=B7=B0=20-=20?= =?UTF-8?q?=EB=8B=A4=EC=9D=8C=20=EB=B2=84=ED=8A=BC=20=EC=83=89=EC=83=81=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EB=93=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KeyringMaker/Shared/Views/KeyringCustomizingView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringCustomizingView.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringCustomizingView.swift index 56e28888d..d497220f4 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringCustomizingView.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringCustomizingView.swift @@ -311,7 +311,7 @@ extension KeyringCustomizingView { } label: { Text(hasCartItems ? "구매 \(cartItems.count)" : "다음") .typography(.suit17B) - .foregroundStyle(hasCartItems ? .white100 : .black100) + .foregroundStyle(hasCartItems ? .white100 : .main500) .padding(4.5) } .buttonStyle(.glassProminent) From 953acccbfa89267d15c13d1b81ebec60adba957f Mon Sep 17 00:00:00 2001 From: giljihun Date: Wed, 28 Jan 2026 13:04:46 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20=EC=A0=95=EB=B3=B4=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EB=B7=B0=EC=8B=9C=ED=8A=B8=20-=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=EC=9E=85=EB=A0=A5=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=B9=B4=EC=9A=B4?= =?UTF-8?q?=ED=8A=B8=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Shared/Views/KeyringInfoInputView+Helpers.swift | 2 +- .../Shared/Views/KeyringInfoInputView+Sheet.swift | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+Helpers.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+Helpers.swift index cbbdcc231..c78020851 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+Helpers.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+Helpers.swift @@ -72,7 +72,7 @@ extension KeyringInfoInputView { } label: { Text("다음") .typography(.suit17B) - .foregroundStyle(viewModel.nameText.isEmpty || hasProfanity ? .gray300 : .black100) + .foregroundStyle(viewModel.nameText.isEmpty || hasProfanity ? .gray300 : .main500) .padding(5) } .buttonStyle(.glassProminent) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+Sheet.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+Sheet.swift index cfa2cf35b..c9314ad65 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+Sheet.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+Sheet.swift @@ -111,10 +111,14 @@ extension KeyringInfoInputView { .typography(.notosans15M) /// 커서 표시기 색상 .tint(.main500) - - Text("\(textCount)/\(viewModel.maxTextCount)") - .typography(.suit13M) - .foregroundStyle(.gray300) + + if viewModel.nameText.count > 0 { + Button { + viewModel.nameText = "" + } label: { + Image(.emptyIcon) + } + } } .padding(.vertical, 13.5) .padding(.horizontal, 16) From 5ab757749988a2b9e71f22833b310f430f0cfa41 Mon Sep 17 00:00:00 2001 From: giljihun Date: Wed, 28 Jan 2026 13:57:30 +0900 Subject: [PATCH 5/6] =?UTF-8?q?style:=20=ED=83=9C=EA=B7=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20alert=20=ED=95=98=EC=9D=B4=ED=8C=8C=EC=9D=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=B4=88=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KeyringInfoInputView+TagManagement.swift | 45 +++++++++++-------- .../Shared/Views/KeyringInfoInputView.swift | 1 - 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+TagManagement.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+TagManagement.swift index a362ce740..3097a1847 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+TagManagement.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+TagManagement.swift @@ -59,32 +59,41 @@ extension KeyringInfoInputView { .typography(.suit17B) .foregroundStyle(.black100) .padding(.top, 14) + .padding(.bottom, 30) - // TextField - TextField("태그 이름을 입력해주세요", text: $newTagName) - .typography(.notosans15R) - .padding(.vertical, 14) - .padding(.horizontal, 16) - .frame(height: 52) - .background( - RoundedRectangle(cornerRadius: 12) - .fill(.white100) - ) - .padding(.top, 21) - .padding(.bottom, 5) - .onChange(of: newTagName) { oldValue, newValue in - if newValue.count > 10 { - newTagName = String(newValue.prefix(10)) + HStack { + // TextField + TextField("태그 이름을 입력해주세요", text: $newTagName) + .typography(.notosans16R) + .onChange(of: newTagName) { oldValue, newValue in + if newValue.count > 10 { + newTagName = String(newValue.prefix(10)) + } + showTagNameAlreadyExistsToast = availableTags.contains(newValue) + } + .tint(.main500) + + if newTagName.count > 0 { + Button { + newTagName = "" + } label: { + Image(.emptyIcon) } - showTagNameAlreadyExistsToast = availableTags.contains(newValue) } - .tint(.main500) + } + .padding(.horizontal, 16) + .padding(.vertical, 14) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(.white100) + ) HStack { Text(showTagNameAlreadyExistsToast ? "이미 사용 중인 태그 이름입니다." : "") .typography(.suit14M) .foregroundStyle(.error) .opacity(showTagNameAlreadyExistsToast ? 1 : 0) + .padding(.top, showTagNameAlreadyExistsToast ? 5 : 0) Spacer() } @@ -139,8 +148,8 @@ extension KeyringInfoInputView { } } .padding(14) + .frame(width: UIScreen.main.bounds.width - 102) // 좌우 51씩 여백 .glassEffect(.regular.interactive(), in: .rect(cornerRadius: 34)) - .frame(width: 300, height: 230) } } diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView.swift index 4f3f6a462..6a598287d 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView.swift @@ -113,7 +113,6 @@ struct KeyringInfoInputView: View { .zIndex(99) addNewTagAlertView - .padding(.horizontal, 51) .zIndex(100) } From 7f98afcfdf97399ed1a706ff70c85af9196fcd02 Mon Sep 17 00:00:00 2001 From: giljihun Date: Wed, 28 Jan 2026 14:03:30 +0900 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20=EC=9D=B8=ED=8F=AC=EB=B7=B0=20-=20?= =?UTF-8?q?=ED=83=9C=EA=B7=B8=20alert=20dismiss=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 1번 -> 키보드 다운 - 2번 -> alert 다운 --- .../Views/KeyringInfoInputView+TagManagement.swift | 3 ++- .../Shared/Views/KeyringInfoInputView.swift | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+TagManagement.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+TagManagement.swift index 3097a1847..758ce7fd5 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+TagManagement.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView+TagManagement.swift @@ -50,7 +50,7 @@ extension KeyringInfoInputView { } } -// MARK: - Add Tag Alert (Glass Style) +// MARK: - Add Tag Alert extension KeyringInfoInputView { var addNewTagAlertView: some View { VStack(spacing: 0) { @@ -65,6 +65,7 @@ extension KeyringInfoInputView { // TextField TextField("태그 이름을 입력해주세요", text: $newTagName) .typography(.notosans16R) + .focused($isTagTextFieldFocused) .onChange(of: newTagName) { oldValue, newValue in if newValue.count > 10 { newTagName = String(newValue.prefix(10)) diff --git a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView.swift b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView.swift index 6a598287d..73dcfcbc1 100644 --- a/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView.swift +++ b/Keychy/Keychy/Presentation/KeyringMaker/Shared/Views/KeyringInfoInputView.swift @@ -36,6 +36,7 @@ struct KeyringInfoInputView: View { @State var sheetDetent: PresentationDetent = .height(76) @State var showSheet: Bool = true @FocusState var isFocused: Bool + @FocusState var isTagTextFieldFocused: Bool // MARK: - Profanity Filtering @State var validationMessage: String = "" @@ -111,6 +112,18 @@ struct KeyringInfoInputView: View { Color.black60 .ignoresSafeArea() .zIndex(99) + .onTapGesture { + // 키보드가 올라와 있으면 키보드만 내림 + if isTagTextFieldFocused { + isTagTextFieldFocused = false + } else { + // 키보드가 이미 내려가 있으면 Alert 닫기 + newTagName = "" + showAddTagAlert = false + showTagNameAlreadyExistsToast = false + sheetDetent = .height(measuredSheetHeight) + } + } addNewTagAlertView .zIndex(100)