Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions ACON-iOS/ACON-iOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@
746F5BF02DE009820081569B /* ACToastType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746F5BEF2DE0097B0081569B /* ACToastType.swift */; };
746F5BF22DE00CE90081569B /* GlassBorderAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746F5BF12DE00CE90081569B /* GlassBorderAttributes.swift */; };
746FF3C02D3D8669001CDAAC /* ACWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746FF3BF2D3D8662001CDAAC /* ACWebViewController.swift */; };
74721B4B2E2A07D100F0ACB9 /* SemiShortModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74721B4A2E2A07D100F0ACB9 /* SemiShortModalView.swift */; };
74721B4E2E2A08DC00F0ACB9 /* SemiShortModalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74721B4D2E2A08CE00F0ACB9 /* SemiShortModalType.swift */; };
74721B502E2A0F9A00F0ACB9 /* VerificationReminderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74721B4F2E2A0F7D00F0ACB9 /* VerificationReminderViewController.swift */; };
74770C192DF1DA97005D4165 /* GoogleMobileAds in Frameworks */ = {isa = PBXBuildFile; productRef = 74770C182DF1DA97005D4165 /* GoogleMobileAds */; };
74770C1B2DF35848005D4165 /* ProfileGoogleAdView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74770C1A2DF35848005D4165 /* ProfileGoogleAdView.swift */; };
74770C1D2DF36DAB005D4165 /* GoogleAdsType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74770C1C2DF36DA2005D4165 /* GoogleAdsType.swift */; };
Expand Down Expand Up @@ -289,7 +292,6 @@
74FA77842DD43709006846C9 /* SplashBGM.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 74FA77832DD43709006846C9 /* SplashBGM.mp3 */; };
D652597C2D62775C00B8176E /* CustomTextFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D652597B2D62775C00B8176E /* CustomTextFieldView.swift */; };
D652597E2D628EB000B8176E /* WithdrawalConfirmationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D652597D2D628EB000B8176E /* WithdrawalConfirmationViewController.swift */; };
D65259802D6291A800B8176E /* WithdrawalConfirmationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D652597F2D6291A800B8176E /* WithdrawalConfirmationView.swift */; };
D696F1B22D3A7E3400CCD5FF /* ACAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D696F1B12D3A7E3400CCD5FF /* ACAlertView.swift */; };
D6E34C462D398B6000CEFA04 /* ACAlertType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E34C3D2D398B6000CEFA04 /* ACAlertType.swift */; };
D6E34C472D398B6000CEFA04 /* ACAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E34C3E2D398B6000CEFA04 /* ACAlertViewController.swift */; };
Expand Down Expand Up @@ -496,6 +498,9 @@
746F5BEF2DE0097B0081569B /* ACToastType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACToastType.swift; sourceTree = "<group>"; };
746F5BF12DE00CE90081569B /* GlassBorderAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlassBorderAttributes.swift; sourceTree = "<group>"; };
746FF3BF2D3D8662001CDAAC /* ACWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACWebViewController.swift; sourceTree = "<group>"; };
74721B4A2E2A07D100F0ACB9 /* SemiShortModalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SemiShortModalView.swift; sourceTree = "<group>"; };
74721B4D2E2A08CE00F0ACB9 /* SemiShortModalType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SemiShortModalType.swift; sourceTree = "<group>"; };
74721B4F2E2A0F7D00F0ACB9 /* VerificationReminderViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerificationReminderViewController.swift; sourceTree = "<group>"; };
74770C1A2DF35848005D4165 /* ProfileGoogleAdView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileGoogleAdView.swift; sourceTree = "<group>"; };
74770C1C2DF36DA2005D4165 /* GoogleAdsType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleAdsType.swift; sourceTree = "<group>"; };
747BB6CD2DCA66EB00352874 /* GlassButtonState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlassButtonState.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -580,7 +585,6 @@
BB785B4E26FA7C11BB85A55D /* Pods-ACON-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ACON-iOS.debug.xcconfig"; path = "Target Support Files/Pods-ACON-iOS/Pods-ACON-iOS.debug.xcconfig"; sourceTree = "<group>"; };
D652597B2D62775C00B8176E /* CustomTextFieldView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTextFieldView.swift; sourceTree = "<group>"; };
D652597D2D628EB000B8176E /* WithdrawalConfirmationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawalConfirmationViewController.swift; sourceTree = "<group>"; };
D652597F2D6291A800B8176E /* WithdrawalConfirmationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WithdrawalConfirmationView.swift; sourceTree = "<group>"; };
D696F1B12D3A7E3400CCD5FF /* ACAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACAlertView.swift; sourceTree = "<group>"; };
D6E34C3D2D398B6000CEFA04 /* ACAlertType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACAlertType.swift; sourceTree = "<group>"; };
D6E34C3E2D398B6000CEFA04 /* ACAlertViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACAlertViewController.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1303,6 +1307,15 @@
path = Type;
sourceTree = "<group>";
};
74721B4C2E2A089800F0ACB9 /* SemiShortModal */ = {
isa = PBXGroup;
children = (
74721B4D2E2A08CE00F0ACB9 /* SemiShortModalType.swift */,
74721B4A2E2A07D100F0ACB9 /* SemiShortModalView.swift */,
);
path = SemiShortModal;
sourceTree = "<group>";
};
747F4FB82D3D944A003DECBF /* Splash */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -1469,6 +1482,7 @@
748D6F7A2D2BCCF4007690B4 /* UIComponents */ = {
isa = PBXGroup;
children = (
74721B4C2E2A089800F0ACB9 /* SemiShortModal */,
742B1B972E00AE300036876A /* NetworkErrorView.swift */,
746F5BEA2DE0091B0081569B /* ACToast */,
74A13D6A2DCC035F007FFFC3 /* LeftAlignedCollectionViewFlowLayout.swift */,
Expand Down Expand Up @@ -1664,6 +1678,7 @@
74BF920D2D391FFE00B923E3 /* LocalVerificationViewController.swift */,
151BD9522D6332A5005E657F /* VerifiedAreasEditView.swift */,
151BD9542D63375D005E657F /* VerifiedAreasEditViewController.swift */,
74721B4F2E2A0F7D00F0ACB9 /* VerificationReminderViewController.swift */,
);
path = View;
sourceTree = "<group>";
Expand Down Expand Up @@ -1844,7 +1859,6 @@
children = (
D6E8168D2D6228F5001E4EBF /* WithdrawalViewController.swift */,
D652597D2D628EB000B8176E /* WithdrawalConfirmationViewController.swift */,
D652597F2D6291A800B8176E /* WithdrawalConfirmationView.swift */,
D6E816A42D623FE5001E4EBF /* WithdrawalTableView.swift */,
D652597B2D62775C00B8176E /* CustomTextFieldView.swift */,
D6E816A32D623E11001E4EBF /* Cell */,
Expand Down Expand Up @@ -2099,7 +2113,6 @@
D652597E2D628EB000B8176E /* WithdrawalConfirmationViewController.swift in Sources */,
746FF3C02D3D8669001CDAAC /* ACWebViewController.swift in Sources */,
152F8D202DF253FE0064022B /* AppleMapService.swift in Sources */,
D65259802D6291A800B8176E /* WithdrawalConfirmationView.swift in Sources */,
155D45B82E26CCBC008C0316 /* BaseUploadInquiryViewController.swift in Sources */,
741A06C82D3532E500778219 /* DropAcornView.swift in Sources */,
15D122292D58BD0200E79866 /* DayOfMonthType.swift in Sources */,
Expand Down Expand Up @@ -2162,6 +2175,7 @@
748ECA6B2D31918D00BBC981 /* LoginView.swift in Sources */,
D6EA38152D42B88F002B68B9 /* SearchEmptyView.swift in Sources */,
74D31C712D5832D000B4B2B4 /* AlbumViewModel.swift in Sources */,
74721B4B2E2A07D100F0ACB9 /* SemiShortModalView.swift in Sources */,
1503DBEB2DFD9CBB001FC3E5 /* GetMenuboardImageListResponse.swift in Sources */,
746A13B82E00549E0097DA25 /* OnboardingTargetType.swift in Sources */,
1547A6F22D33AD4500E96616 /* SpotListModel.swift in Sources */,
Expand Down Expand Up @@ -2226,6 +2240,7 @@
74A13D6B2DCC035F007FFFC3 /* LeftAlignedCollectionViewFlowLayout.swift in Sources */,
746F15B72D3E2083003EA031 /* PostLocalAreaRequest.swift in Sources */,
74BF92142D391FFE00B923E3 /* LocalMapView.swift in Sources */,
74721B502E2A0F9A00F0ACB9 /* VerificationReminderViewController.swift in Sources */,
D696F1B22D3A7E3400CCD5FF /* ACAlertView.swift in Sources */,
743069892D3D2F5A0033178C /* NetworkResult.swift in Sources */,
152F8D242DF268FA0064022B /* SpotListCellDelegate.swift in Sources */,
Expand Down Expand Up @@ -2290,6 +2305,7 @@
15AA6D172D68B4EF008021C6 /* SpotListErrorType.swift in Sources */,
741E68952D3D38BC00DF99EF /* BaseService.swift in Sources */,
746F15BB2D3E2167003EA031 /* LocalVerificationTargetType.swift in Sources */,
74721B4E2E2A08DC00F0ACB9 /* SemiShortModalType.swift in Sources */,
D6E34C462D398B6000CEFA04 /* ACAlertType.swift in Sources */,
D6E34C472D398B6000CEFA04 /* ACAlertViewController.swift in Sources */,
745C7E022D358E900074DBDB /* SpotSearchView.swift in Sources */,
Expand Down
16 changes: 15 additions & 1 deletion ACON-iOS/ACON-iOS/Global/Literals/StringLiterals.swift
Original file line number Diff line number Diff line change
Expand Up @@ -244,9 +244,11 @@ enum StringLiterals {

enum LocalVerification {

static let warning = "현재 내 지역에 안 계시면 건너뛰기를 해주세요"

static let title = "믿을 수 있는 리뷰를 위해\n지역인증이 필요해요"

static let description = "더 정확한 로컬맛집을 추천해드릴 수 있어요"
static let description = "내 지역에 남긴 리뷰는 추천 장소에 반영돼요."

static let oneSecond = "1초만에 인증하기"

Expand Down Expand Up @@ -276,6 +278,18 @@ enum StringLiterals {

}

enum LocalVerificationModal {

static let title = "내 지역을 인증해 주세요!"

static let description = "내 지역에 남긴 리뷰는 로컬리뷰로 인정되어\n더 많은 사람들에게 추천돼요."

static let cancel = "다음에 하기"

static let confirm = "지역 인증하러 하기"

}

enum SpotListFilter {

static let pageTitle = "상세조건"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,13 +128,13 @@ extension LoginModalViewController {
if hasVerifiedArea {
let authStatus = ACLocationManager.shared.locationManager.authorizationStatus
if authStatus == .denied || authStatus == .restricted {
navigateToLocalVerificationVC()
NavigationUtils.navigateToOnboardingLocalVerification()
} else {
NavigationUtils.navigateToTabBar()
}
} else {
print("🥑onSuccess && !hasVerifiedArea")
navigateToLocalVerificationVC()
NavigationUtils.navigateToOnboardingLocalVerification()
}
if let presentedVCType = presentedVCType {
AmplitudeManager.shared.trackEventWithProperties(AmplitudeLiterals.EventName.guest, properties: [presentedVCType: true])
Expand All @@ -144,14 +144,6 @@ extension LoginModalViewController {
}
}
}

func navigateToLocalVerificationVC() {
let vm = LocalVerificationViewModel(flowType: .onboarding)
let vc = LocalVerificationViewController(viewModel: vm)
if let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate {
sceneDelegate.window?.rootViewController = UINavigationController(rootViewController: vc)
}
}

func showLoginFailAlert() {
self.showDefaultAlert(title: StringLiterals.Alert.loginFailTitle,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//
// SemiShortModalType.swift
// ACON-iOS
//
// Created by 이수민 on 7/18/25.
//

import Foundation

enum SemiShortModalType: CaseIterable {

case localVerificationReminder
case withdrawalConfirmation

var title: String {
switch self {
case .localVerificationReminder:
return StringLiterals.LocalVerificationModal.title
case .withdrawalConfirmation:
return StringLiterals.WithdrawalConfirmation.title
}
}

var description: String {
switch self {
case .localVerificationReminder:
return StringLiterals.LocalVerificationModal.description
case .withdrawalConfirmation:
return StringLiterals.WithdrawalConfirmation.description
}
}

var cancelButtonTitle: String {
switch self {
case .localVerificationReminder:
return StringLiterals.LocalVerificationModal.cancel
case .withdrawalConfirmation:
return StringLiterals.WithdrawalConfirmation.cancelButtonTitle
}
}

var confirmButtonTitle: String {
switch self {
case .localVerificationReminder:
return StringLiterals.LocalVerificationModal.confirm
case .withdrawalConfirmation:
return StringLiterals.WithdrawalConfirmation.confirmButtonTitle
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,41 @@
// WithdrawalConfirmationView.swift
// ACON-iOS
//
// Created by Jaehyun Ahn on 2/17/25.
// Created by 이수민 on 7/18/25.
//

import UIKit

final class WithdrawalConfirmationView: GlassmorphismView {
final class SemiShortModalView: GlassmorphismView {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SemiShortModalView로 합친 것 좋네요! 👍👍

🐿️🐿️🐿️ setLayout 부분 62...73줄에서
cancelButton, confirmButton의 height에 heightRatio가 곱해져있는 탓에 코너가 어그러지는 것 같습니다!
코너가 호 모양이 될 수 있도록 높이 44로 고정해주실 수 있나요?


// MARK: - UI Properties

private let titleLabel = UILabel()

private let descriptionLabel = UILabel()

let cancelButton = ACButton(style: GlassButton(borderGlassmorphismType: .buttonGlassDefault, buttonType: .line_22_b1SB), title: StringLiterals.WithdrawalConfirmation.cancelButtonTitle)
let cancelButton: ACButton

let confirmButton = ACButton(style: GlassButton(glassmorphismType: .buttonGlassDefault, buttonType: .full_22_b1SB), title: StringLiterals.WithdrawalConfirmation.confirmButtonTitle)
let confirmButton: ACButton

private let semiShortModalType: SemiShortModalType


// MARK: - LifeCycle

init() {
init(semiShortModalType: SemiShortModalType) {
self.semiShortModalType = semiShortModalType

self.cancelButton = ACButton(style: GlassButton(borderGlassmorphismType: .buttonGlassDefault, buttonType: .line_22_b1SB), title: semiShortModalType.cancelButtonTitle)
self.confirmButton = ACButton(style: GlassButton(glassmorphismType: .buttonGlassDefault, buttonType: .full_22_b1SB), title: semiShortModalType.confirmButtonTitle)

super.init(.bottomSheetGlass)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override func setStyle() {
super.setStyle()

self.setHandlerImageView()

titleLabel.setLabel(text: StringLiterals.WithdrawalConfirmation.title,
style: .h4SB,
alignment: .center)

descriptionLabel.setLabel(text: StringLiterals.WithdrawalConfirmation.description,
style: .b1R,
color: .gray300,
alignment: .center)

[cancelButton, confirmButton].forEach {
$0.isUserInteractionEnabled = true
}
}

override func setHierarchy() {
super.setHierarchy()

Expand All @@ -75,15 +63,30 @@ final class WithdrawalConfirmationView: GlassmorphismView {
$0.top.equalToSuperview().inset(219*ScreenUtils.heightRatio)
$0.leading.equalToSuperview().inset(ScreenUtils.horizontalInset)
$0.width.equalTo(ScreenUtils.widthRatio*120)
$0.height.equalTo(ScreenUtils.heightRatio*44)
$0.height.equalTo(44)
}

confirmButton.snp.makeConstraints{
$0.top.equalToSuperview().inset(219*ScreenUtils.heightRatio)
$0.trailing.equalToSuperview().inset(ScreenUtils.horizontalInset)
$0.width.equalTo(ScreenUtils.widthRatio*200)
$0.height.equalTo(ScreenUtils.heightRatio*44)
$0.height.equalTo(44)
}
}

override func setStyle() {
super.setStyle()

self.setHandlerImageView()

titleLabel.setLabel(text: semiShortModalType.title,
style: .h4SB,
alignment: .center)

descriptionLabel.setLabel(text: semiShortModalType.description,
style: .b1R,
color: .gray300,
alignment: .center)
}

}
14 changes: 14 additions & 0 deletions ACON-iOS/ACON-iOS/Global/Utils/NavigatonUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,18 @@ struct NavigationUtils {
}
}

static func navigateToOnboardingLocalVerification() {
let vm = LocalVerificationViewModel(flowType: .onboarding)
let vc = LocalVerificationViewController(viewModel: vm)
if let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate {
sceneDelegate.window?.rootViewController = UINavigationController(rootViewController: vc)
}
}

static func naviateToLoginOnboarding() {
if let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate {
sceneDelegate.window?.rootViewController = OnboardingViewController(flowType: .login)
}
}

}
7 changes: 7 additions & 0 deletions ACON-iOS/ACON-iOS/Global/Utils/ScreenUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ struct ScreenUtils {
return window.safeAreaInsets.top
}

static var safeAreaBottomHeight: CGFloat {
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first else {
return 0
}
return window.safeAreaInsets.bottom
}

// MARK: - horizontal inset

Expand Down
10 changes: 6 additions & 4 deletions ACON-iOS/ACON-iOS/Presentation/Base/BaseNavViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ class BaseNavViewController: UIViewController {

var backCompletion: (() -> Void)?

var skipCompletion: (() -> Void)?

// MARK: - Life Cycle

override func viewDidLoad() {
Expand Down Expand Up @@ -222,20 +224,20 @@ extension BaseNavViewController {


// MARK: - 건너뛰기 버튼

func setSkipButton() {
func setSkipButton(completion: (() -> Void)? = NavigationUtils.navigateToTabBar) {
rightButton.do {
$0.isHidden = false
$0.setAttributedTitle(text: "건너뛰기", style: .t4SB)
setButtonAction(button: rightButton,
target: self,
action: #selector(skipButtonTapped))
}
self.skipCompletion = completion
}

@objc
func skipButtonTapped() {
NavigationUtils.navigateToTabBar()
skipCompletion?()
}


Expand Down
Loading