diff --git a/ACON-iOS/ACON-iOS.xcodeproj/project.pbxproj b/ACON-iOS/ACON-iOS.xcodeproj/project.pbxproj index 6957d743..acf16857 100644 --- a/ACON-iOS/ACON-iOS.xcodeproj/project.pbxproj +++ b/ACON-iOS/ACON-iOS.xcodeproj/project.pbxproj @@ -37,11 +37,11 @@ 156D925C2D6536CF0037F8F1 /* CustomAlertTitleAndButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 156D925B2D6536CF0037F8F1 /* CustomAlertTitleAndButtonsView.swift */; }; 156D925E2D65375B0037F8F1 /* CustomAlertTitleAndButtonsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 156D925D2D65375B0037F8F1 /* CustomAlertTitleAndButtonsViewController.swift */; }; 156D92602D6570A90037F8F1 /* PatchProfileRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 156D925F2D6570A90037F8F1 /* PatchProfileRequest.swift */; }; - 157C0BE82DC897EE000B04AF /* SpotToggleButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157C0BE72DC897EE000B04AF /* SpotToggleButtonView.swift */; }; 157135B12DC2A259008C84F9 /* SpotListCollectionViewFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157135B02DC2A259008C84F9 /* SpotListCollectionViewFlowLayout.swift */; }; 157C061F2DC5E7CE000B04AF /* SpotTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157C061E2DC5E7CE000B04AF /* SpotTagType.swift */; }; 157C06212DC5EBB4000B04AF /* SpotTagButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157C06202DC5EBB4000B04AF /* SpotTagButton.swift */; }; 157C0AC12DC689E7000B04AF /* UIImage+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157C0AC02DC689E7000B04AF /* UIImage+.swift */; }; + 157C0BE82DC897EE000B04AF /* SpotToggleButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157C0BE72DC897EE000B04AF /* SpotToggleButtonView.swift */; }; 15A1471E2D5A7F96003793EE /* LabelBoxWithDeletableButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A1471D2D5A7F96003793EE /* LabelBoxWithDeletableButton.swift */; }; 15A147212D5B256D003793EE /* LocalVerificationFlowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A147202D5B256D003793EE /* LocalVerificationFlowType.swift */; }; 15A3F6A62D36C49F00577E16 /* SpotListItemSizeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A3F6A52D36C49F00577E16 /* SpotListItemSizeType.swift */; }; @@ -210,10 +210,8 @@ 74BF92022D385D8700B923E3 /* MenuCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF92012D385D8100B923E3 /* MenuCollectionViewCell.swift */; }; 74BF92042D3861A600B923E3 /* SpotDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF92032D38619E00B923E3 /* SpotDetailViewController.swift */; }; 74BF92072D38622B00B923E3 /* SpotDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF92062D38622600B923E3 /* SpotDetailViewModel.swift */; }; - 74BF92102D391FFE00B923E3 /* LocalVerificationFinishedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF920A2D391FFE00B923E3 /* LocalVerificationFinishedView.swift */; }; 74BF92112D391FFE00B923E3 /* LocalVerificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF920D2D391FFE00B923E3 /* LocalVerificationViewController.swift */; }; 74BF92122D391FFE00B923E3 /* LocalMapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF92092D391FFE00B923E3 /* LocalMapViewController.swift */; }; - 74BF92132D391FFE00B923E3 /* LocalVerificationFinishedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF920B2D391FFE00B923E3 /* LocalVerificationFinishedViewController.swift */; }; 74BF92142D391FFE00B923E3 /* LocalMapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF92082D391FFE00B923E3 /* LocalMapView.swift */; }; 74BF92152D391FFE00B923E3 /* LocalVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF920C2D391FFE00B923E3 /* LocalVerificationView.swift */; }; 74BF92172D393B4A00B923E3 /* Int+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF92162D393B4700B923E3 /* Int+.swift */; }; @@ -287,11 +285,11 @@ 156D925B2D6536CF0037F8F1 /* CustomAlertTitleAndButtonsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomAlertTitleAndButtonsView.swift; sourceTree = ""; }; 156D925D2D65375B0037F8F1 /* CustomAlertTitleAndButtonsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomAlertTitleAndButtonsViewController.swift; sourceTree = ""; }; 156D925F2D6570A90037F8F1 /* PatchProfileRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PatchProfileRequest.swift; sourceTree = ""; }; - 157C0BE72DC897EE000B04AF /* SpotToggleButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotToggleButtonView.swift; sourceTree = ""; }; 157135B02DC2A259008C84F9 /* SpotListCollectionViewFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotListCollectionViewFlowLayout.swift; sourceTree = ""; }; 157C061E2DC5E7CE000B04AF /* SpotTagType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotTagType.swift; sourceTree = ""; }; 157C06202DC5EBB4000B04AF /* SpotTagButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotTagButton.swift; sourceTree = ""; }; 157C0AC02DC689E7000B04AF /* UIImage+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+.swift"; sourceTree = ""; }; + 157C0BE72DC897EE000B04AF /* SpotToggleButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotToggleButtonView.swift; sourceTree = ""; }; 15A1471D2D5A7F96003793EE /* LabelBoxWithDeletableButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelBoxWithDeletableButton.swift; sourceTree = ""; }; 15A147202D5B256D003793EE /* LocalVerificationFlowType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalVerificationFlowType.swift; sourceTree = ""; }; 15A3F6A52D36C49F00577E16 /* SpotListItemSizeType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotListItemSizeType.swift; sourceTree = ""; }; @@ -458,8 +456,6 @@ 74BF92062D38622600B923E3 /* SpotDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotDetailViewModel.swift; sourceTree = ""; }; 74BF92082D391FFE00B923E3 /* LocalMapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalMapView.swift; sourceTree = ""; }; 74BF92092D391FFE00B923E3 /* LocalMapViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalMapViewController.swift; sourceTree = ""; }; - 74BF920A2D391FFE00B923E3 /* LocalVerificationFinishedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalVerificationFinishedView.swift; sourceTree = ""; }; - 74BF920B2D391FFE00B923E3 /* LocalVerificationFinishedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalVerificationFinishedViewController.swift; sourceTree = ""; }; 74BF920C2D391FFE00B923E3 /* LocalVerificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalVerificationView.swift; sourceTree = ""; }; 74BF920D2D391FFE00B923E3 /* LocalVerificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalVerificationViewController.swift; sourceTree = ""; }; 74BF92162D393B4700B923E3 /* Int+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+.swift"; sourceTree = ""; }; @@ -1361,8 +1357,6 @@ children = ( 74BF92082D391FFE00B923E3 /* LocalMapView.swift */, 74BF92092D391FFE00B923E3 /* LocalMapViewController.swift */, - 74BF920A2D391FFE00B923E3 /* LocalVerificationFinishedView.swift */, - 74BF920B2D391FFE00B923E3 /* LocalVerificationFinishedViewController.swift */, 74BF920C2D391FFE00B923E3 /* LocalVerificationView.swift */, 74BF920D2D391FFE00B923E3 /* LocalVerificationViewController.swift */, 151BD9522D6332A5005E657F /* VerifiedAreasEditView.swift */, @@ -1879,7 +1873,6 @@ 748D6F802D2BCD94007690B4 /* ObservablePattern.swift in Sources */, 74BF92192D395FE800B923E3 /* ACToastController.swift in Sources */, 1558BADE2D31AB6C00ECDEF8 /* SpotListViewController.swift in Sources */, - 74BF92102D391FFE00B923E3 /* LocalVerificationFinishedView.swift in Sources */, 74BF92112D391FFE00B923E3 /* LocalVerificationViewController.swift in Sources */, 74BF92122D391FFE00B923E3 /* LocalMapViewController.swift in Sources */, D6E8168E2D6228F5001E4EBF /* WithdrawalViewController.swift in Sources */, @@ -1888,7 +1881,6 @@ 746261692D3EA33300A4E84F /* PostReviewRequest.swift in Sources */, 15CD257E2D3FF4F200320006 /* SpotListTargetType.swift in Sources */, 156D925C2D6536CF0037F8F1 /* CustomAlertTitleAndButtonsView.swift in Sources */, - 74BF92132D391FFE00B923E3 /* LocalVerificationFinishedViewController.swift in Sources */, 15AA6D152D68AC09008021C6 /* GetDongRequest.swift in Sources */, 74DDBA8D2DC45E4500BF9824 /* ACButton.swift in Sources */, 74A13D6B2DCC035F007FFFC3 /* LeftAlignedCollectionViewFlowLayout.swift in Sources */, diff --git a/ACON-iOS/ACON-iOS/Global/Literals/StringLiterals.swift b/ACON-iOS/ACON-iOS/Global/Literals/StringLiterals.swift index d61df596..a5b142bd 100644 --- a/ACON-iOS/ACON-iOS/Global/Literals/StringLiterals.swift +++ b/ACON-iOS/ACON-iOS/Global/Literals/StringLiterals.swift @@ -161,11 +161,11 @@ enum StringLiterals { enum LocalVerification { - static let needLocalVerification = "로컬 맛집 추천을 위해\n동네 인증이 필요해요" + static let title = "믿을 수 있는 리뷰를 위해\n지역인증이 필요해요" - static let doLocalVerification = "자주 가는 동네로 지역 인증을 해보세요" + static let description = "더 정확한 로컬맛집을 추천해드릴 수 있어요" - static let new = "새로운" + static let oneSecond = "1초만에 인증하기" static let verifyLocal = " 나의 동네 인증하기" diff --git a/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Icons/2.0/ic_location.imageset/Contents.json b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Icons/2.0/ic_location.imageset/Contents.json new file mode 100644 index 00000000..9c9ad42f --- /dev/null +++ b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Icons/2.0/ic_location.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Location.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Icons/2.0/ic_location.imageset/Location.png b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Icons/2.0/ic_location.imageset/Location.png new file mode 100644 index 00000000..cceb2a5d Binary files /dev/null and b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Icons/2.0/ic_location.imageset/Location.png differ diff --git a/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/Contents.json b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/Contents.json index d4bd622e..30603772 100644 --- a/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/Contents.json +++ b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "img_background_local_certification.png", + "filename" : "Group 1707481680.png", "idiom" : "universal" } ], diff --git a/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/Group 1707481680.png b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/Group 1707481680.png new file mode 100644 index 00000000..5b28d4fe Binary files /dev/null and b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/Group 1707481680.png differ diff --git a/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/img_background_local_certification.png b/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/img_background_local_certification.png deleted file mode 100644 index 80e38f46..00000000 Binary files a/ACON-iOS/ACON-iOS/Global/Resources/Assets.xcassets/Images/2.0/img_background_local_certification.imageset/img_background_local_certification.png and /dev/null differ diff --git a/ACON-iOS/ACON-iOS/Global/Settings/Config/Config.swift b/ACON-iOS/ACON-iOS/Global/Settings/Config/Config.swift index 42d6b65b..867aa2b6 100644 --- a/ACON-iOS/ACON-iOS/Global/Settings/Config/Config.swift +++ b/ACON-iOS/ACON-iOS/Global/Settings/Config/Config.swift @@ -21,8 +21,12 @@ enum Config { static let nMapClientKey = "NMFClientId" + static let nmfNcpKeyID = "NMFNcpKeyId" + static let amplitudeKey = "AMPLITUDE_KEY" + static let nmfCustomStyleID = "NMFCustomStyleID" + } } @@ -67,6 +71,13 @@ extension Config { return key }() + static let nmfNcpKeyID: String = { + guard let key = Config.infoDictionary[Keys.Plist.nmfNcpKeyID] as? String else { + fatalError("nmfNcpKeyID is not set in plist for this configuration") + } + return key + }() + static let amplitudeKey: String = { guard let key = Config.infoDictionary[Keys.Plist.amplitudeKey] as? String else { fatalError("amplitudeKey is not set in plist for this configuration") @@ -74,4 +85,11 @@ extension Config { return key }() + static let nmfCustomStyleID: String = { + guard let key = Config.infoDictionary[Keys.Plist.nmfCustomStyleID] as? String else { + fatalError("nmfCustomStyleID is not set in plist for this configuration") + } + return key + }() + } diff --git a/ACON-iOS/ACON-iOS/Global/Settings/Info.plist b/ACON-iOS/ACON-iOS/Global/Settings/Info.plist index 4e17d3bb..f282e99e 100644 --- a/ACON-iOS/ACON-iOS/Global/Settings/Info.plist +++ b/ACON-iOS/ACON-iOS/Global/Settings/Info.plist @@ -53,6 +53,10 @@ NMFClientId ${NMAP_CLIENT_KEY} + NMFNcpKeyId + ${NMF_NCP_KEY_ID} + NMFCustomStyleID + ${NMF_CUSTOM_STYLE_ID} NSAppTransportSecurity NSAllowsArbitraryLoads diff --git a/ACON-iOS/ACON-iOS/Global/UIComponents/GlassmorphismView.swift b/ACON-iOS/ACON-iOS/Global/UIComponents/GlassmorphismView.swift index 6c95fcc6..7c53d374 100644 --- a/ACON-iOS/ACON-iOS/Global/UIComponents/GlassmorphismView.swift +++ b/ACON-iOS/ACON-iOS/Global/UIComponents/GlassmorphismView.swift @@ -77,3 +77,25 @@ extension GlassmorphismView { } } + + +// MARK: - Set Gradient + +extension GlassmorphismView { + + func setGradient(topColor: UIColor = .gray900.withAlphaComponent(1), + bottomColor: UIColor = .gray900.withAlphaComponent(0.1)) { + layer.sublayers?.filter { $0 is CAGradientLayer }.forEach { $0.removeFromSuperlayer() + } + + let gradient = CAGradientLayer() + gradient.do { + $0.frame = bounds + $0.colors = [topColor.cgColor, bottomColor.cgColor] + $0.startPoint = CGPoint(x: 0.5, y: 0.0) + $0.endPoint = CGPoint(x: 0.5, y: 1.0) + } + layer.insertSublayer(gradient, at: 0) + } + +} diff --git a/ACON-iOS/ACON-iOS/Global/Utils/ScreenUtils.swift b/ACON-iOS/ACON-iOS/Global/Utils/ScreenUtils.swift index f5bfcb94..694a6096 100644 --- a/ACON-iOS/ACON-iOS/Global/Utils/ScreenUtils.swift +++ b/ACON-iOS/ACON-iOS/Global/Utils/ScreenUtils.swift @@ -42,4 +42,8 @@ struct ScreenUtils { return ScreenUtils.heightRatio * 56 } + static var safeAreaTopHeight: CGFloat { + return UIApplication.shared.windows.first?.safeAreaInsets.top ?? 0 + } + } diff --git a/ACON-iOS/ACON-iOS/Presentation/Base/BaseNavViewController.swift b/ACON-iOS/ACON-iOS/Presentation/Base/BaseNavViewController.swift index f3426536..67d49378 100644 --- a/ACON-iOS/ACON-iOS/Presentation/Base/BaseNavViewController.swift +++ b/ACON-iOS/ACON-iOS/Presentation/Base/BaseNavViewController.swift @@ -14,6 +14,8 @@ class BaseNavViewController: UIViewController { // MARK: - UI Properties + var glassmorphismNavBarView: GlassmorphismView = GlassmorphismView(.gradientGlass) + var topInsetView: UIView = UIView() var navigationBarView: UIView = UIView() @@ -30,8 +32,7 @@ class BaseNavViewController: UIViewController { var centerTitleLabel: UILabel = UILabel() - // 🍇 TODO: 글모 Type 확인 - let glassMorphismView = GlassmorphismView(.buttonGlassDisabled) + let glassMorphismView = GlassmorphismView(.gradientGlass) var backCompletion: (() -> Void)? @@ -182,10 +183,15 @@ extension BaseNavViewController { func setGlassMorphism() { self.view.insertSubview(glassMorphismView, aboveSubview: contentView) + [topInsetView, navigationBarView].forEach { + $0.backgroundColor = .clear + } glassMorphismView.snp.makeConstraints { - $0.top.equalTo(topInsetView) - $0.bottom.horizontalEdges.equalTo(navigationBarView) + $0.top.horizontalEdges.equalToSuperview() + $0.height.equalTo(ScreenUtils.safeAreaTopHeight + ScreenUtils.navViewHeight) } + self.view.layoutIfNeeded() + glassMorphismView.setGradient() } } diff --git a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalMapView.swift b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalMapView.swift index a52437c3..19757c37 100644 --- a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalMapView.swift +++ b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalMapView.swift @@ -19,8 +19,11 @@ final class LocalMapView: BaseView { var acMapMarker: NMFMarker = NMFMarker() - var finishVerificationButton: UIButton = UIButton() - + var finishVerificationButton: ACButton = ACButton(style: GlassButton(glassmorphismType: .buttonGlassDefault, + buttonType: .full_12_t4SB), + title: StringLiterals.LocalVerification.finishVerification) + + // MARK: - Lifecycle override func setHierarchy() { @@ -32,10 +35,9 @@ final class LocalMapView: BaseView { override func setLayout() { super.setLayout() - + nMapView.snp.makeConstraints { - $0.top.horizontalEdges.equalToSuperview() - $0.height.equalTo(ScreenUtils.heightRatio*564) + $0.edges.equalToSuperview() } finishVerificationButton.snp.makeConstraints { @@ -54,27 +56,24 @@ final class LocalMapView: BaseView { $0.showZoomControls = false $0.showScaleBar = false $0.showCompass = false - $0.mapView.positionMode = .disabled - $0.mapView.zoomLevel = 17 - $0.mapView.minZoomLevel = 14 - $0.mapView.maxZoomLevel = 18 + $0.mapView.do { + $0.positionMode = .disabled + $0.zoomLevel = 17 + $0.minZoomLevel = 14 + $0.maxZoomLevel = 18 + $0.customStyleId = Config.nmfCustomStyleID + $0.logoAlign = .rightTop + $0.logoMargin = ConstraintInsets(top: ScreenUtils.safeAreaTopHeight+ScreenUtils.heightRatio*80, left: 0, bottom: 0, right: ScreenUtils.widthRatio*16) + } } acMapMarker.do { - $0.iconImage = NMFOverlayImage(name: "ic_mark") - $0.width = 48 - $0.height = 48 + $0.iconImage = NMFOverlayImage(name: "ic_location") + // TODO: 피그마상 36x36인데 우선 디자인과 100X100으로 합의 + $0.width = 100 + $0.height = 100 $0.mapView = nMapView.mapView } - - finishVerificationButton.do { - $0.setAttributedTitle(text: StringLiterals.LocalVerification.finishVerification, - style: .h8, - color: .acWhite, - for: .normal) - $0.backgroundColor = .gray500 - $0.roundedButton(cornerRadius: 6, maskedCorners: [.layerMaxXMaxYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMinXMinYCorner]) - } } } diff --git a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalMapViewController.swift b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalMapViewController.swift index a566fdc5..2c0d3f2c 100644 --- a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalMapViewController.swift +++ b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalMapViewController.swift @@ -60,13 +60,15 @@ class LocalMapViewController: BaseNavViewController { super.setLayout() localMapView.snp.makeConstraints { - $0.edges.equalToSuperview() + $0.top.equalTo(self.topInsetView.snp.top) + $0.bottom.horizontalEdges.equalToSuperview() } } override func setStyle() { super.setStyle() + self.setGlassMorphism() self.setBackButton() self.setSecondTitleLabelStyle(title: StringLiterals.LocalVerification.locateOnMap) } @@ -99,7 +101,7 @@ private extension LocalMapViewController { switch flowType { case .onboarding: self?.localArea = areaName - self?.presentVerificationFinsishedVC() + self?.navigateToOnboarding() case .adding, .switching: guard let vcStack = self?.navigationController?.viewControllers else { return } self?.localArea = areaName @@ -135,20 +137,14 @@ private extension LocalMapViewController { } -// MARK: - @objc functions +// MARK: - navigation functions private extension LocalMapViewController { - func presentVerificationFinsishedVC() { - let vc = LocalVerificationFinishedViewController(localArea: self.localArea) - vc.dismissCompletion = { [weak self] in - self?.removeBlurView() + func navigateToOnboarding() { + if let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate { + sceneDelegate.window?.rootViewController = OnboardingViewController() } - - vc.setSheetLayout(detent: .middle) - vc.isModalInPresentation = true - self.addBlurView() - self.present(vc, animated: true) } } diff --git a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationFinishedView.swift b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationFinishedView.swift deleted file mode 100644 index fe9c0594..00000000 --- a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationFinishedView.swift +++ /dev/null @@ -1,142 +0,0 @@ -// -// LocalVerificationFinishedView.swift -// ACON-iOS -// -// Created by 이수민 on 1/15/25. -// - -import UIKit - -import SnapKit -import Then - -final class LocalVerificationFinishedView: BaseView { - - // MARK: - UI Properties - - var titleLabel: UILabel = UILabel() - - private let explainationLabel: UILabel = UILabel() - - private let localAcornImageView: UIImageView = UIImageView() - - private let plainAcornImageView: UIImageView = UIImageView() - - private let localAcornLabel: UILabel = UILabel() - - private let plainAcornLabel: UILabel = UILabel() - - var startButton: UIButton = UIButton() - - - // MARK: - Lifecycle - - override func setHierarchy() { - super.setHierarchy() - - self.addSubviews(titleLabel, - explainationLabel, - localAcornImageView, - plainAcornImageView, - localAcornLabel, - plainAcornLabel, - startButton) - } - - override func setLayout() { - super.setLayout() - - titleLabel.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*78) - $0.horizontalEdges.equalToSuperview().inset(ScreenUtils.widthRatio*16) - } - - explainationLabel.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*148) - $0.horizontalEdges.equalToSuperview().inset(ScreenUtils.widthRatio*16) - } - - localAcornImageView.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*240) - $0.leading.equalToSuperview().inset(ScreenUtils.widthRatio*60) - $0.width.height.equalTo(104) - } - - plainAcornImageView.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*240) - $0.trailing.equalToSuperview().inset(ScreenUtils.widthRatio*60) - $0.width.height.equalTo(104) - } - - localAcornLabel.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*352) - $0.leading.equalToSuperview().inset(ScreenUtils.widthRatio*60) - $0.width.equalTo(104) - } - - plainAcornLabel.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*352) - $0.trailing.equalToSuperview().inset(ScreenUtils.widthRatio*60) - $0.width.equalTo(104) - } - - startButton.snp.makeConstraints { - $0.bottom.equalToSuperview().inset(ScreenUtils.heightRatio*40) - $0.horizontalEdges.equalToSuperview().inset(ScreenUtils.widthRatio*16) - $0.height.equalTo(52) - } - - } - - override func setStyle() { - super.setStyle() - - self.setHandlerImageView() - self.backgroundColor = .dimDefault - self.backgroundColor?.withAlphaComponent(0.8) - - explainationLabel.do { - $0.setLabel(text: StringLiterals.LocalVerification.localAcornExplaination, - style: .b2, - color: .gray300) - } - - localAcornImageView.do { - $0.image = .icLocalAcon - $0.contentMode = .scaleAspectFit - } - - plainAcornImageView.do { - $0.image = .icNormalAcon - $0.contentMode = .scaleAspectFit - } - - localAcornLabel.do { - $0.setLabel(text: StringLiterals.LocalVerification.localAcorn, - style: .h7, - color: .acWhite, - alignment: .center) - } - - plainAcornLabel.do { - $0.setLabel(text: StringLiterals.LocalVerification.plainAcorn, - style: .h7, - color: .acWhite, - alignment: .center) - } - - startButton.do { - $0.setAttributedTitle(text: StringLiterals.LocalVerification.letsStart, - style: .h7, - color: .gray600, - for: .disabled) - $0.setAttributedTitle(text: StringLiterals.LocalVerification.letsStart, - style: .h7, - color: .acWhite, - for: .normal) - $0.backgroundColor = .gray800 - $0.layer.cornerRadius = 6 - } - } - -} diff --git a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationFinishedViewController.swift b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationFinishedViewController.swift deleted file mode 100644 index 18b5fb9e..00000000 --- a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationFinishedViewController.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// LocalVerificationFinishedViewController.swift -// ACON-iOS -// -// Created by 이수민 on 1/15/25. -// - -import UIKit - -import SnapKit -import Then - -class LocalVerificationFinishedViewController: BaseViewController { - - // MARK: - UI Properties - - private let localVerificationFinishedView = LocalVerificationFinishedView() - - var localArea: String - - - // MARK: - LifeCycle - - init(localArea: String) { - self.localArea = localArea - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - addTarget() - } - - var dismissCompletion: (() -> Void)? - - override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - - if isBeingDismissed { - dismissCompletion?() - } - } - - override func setHierarchy() { - super.setHierarchy() - - self.view.addSubview(localVerificationFinishedView) - } - - override func setLayout() { - super.setLayout() - - localVerificationFinishedView.snp.makeConstraints { - $0.edges.equalToSuperview() - } - } - - override func setStyle() { - super.setStyle() - - localVerificationFinishedView.titleLabel.do { - $0.setLabel(text: StringLiterals.LocalVerification.now + localArea + StringLiterals.LocalVerification.localAcornTitle, - style: .h5, - color: .acWhite) - } - } - - func addTarget() { - localVerificationFinishedView.startButton.addTarget(self, - action: #selector(startButtonTapped), - for: .touchUpInside) - } - -} - - -// MARK: - @objc functions - -private extension LocalVerificationFinishedViewController { - - @objc - func startButtonTapped() { - AmplitudeManager.shared.trackEventWithProperties(AmplitudeLiterals.EventName.areaVerified, properties: ["click_go_home?": true]) - goToTabView() - } - -} - - -// MARK: - Close View - -private extension LocalVerificationFinishedViewController { - - @objc - func goToTabView() { - if let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate { - sceneDelegate.window?.rootViewController = OnboardingViewController() - } - } - -} diff --git a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationView.swift b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationView.swift index 78387d54..3d970071 100644 --- a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationView.swift +++ b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationView.swift @@ -14,64 +14,60 @@ final class LocalVerificationView: BaseView { // MARK: - UI Properties - private let weNeedYourAddressLabel: UILabel = UILabel() + private let backgroundImageView: UIImageView = UIImageView() - private let doLocalVerificationLabel: UILabel = UILabel() + private let titleLabel: UILabel = UILabel() - var verifyNewLocalButton: UIButton = UIButton() + private let descriptionLabel: UILabel = UILabel() - var nextButton: UIButton = UIButton() + private let oneSecondLabel: UILabel = UILabel() + + var nextButton: ACButton = ACButton(style: GlassButton(glassmorphismType: .buttonGlassDefault, buttonType: .full_12_t4SB), title: StringLiterals.LocalVerification.next) - var verifyNewLocalButtonConfiguration: UIButton.Configuration = { - var configuration = UIButton.Configuration.plain() - configuration.imagePlacement = .leading - configuration.imagePadding = 8 - configuration.titleAlignment = .leading - configuration.preferredSymbolConfigurationForImage = UIImage.SymbolConfiguration(pointSize: 20) - configuration.contentInsets = NSDirectionalEdgeInsets(top: 16, - leading: 16, - bottom: 16, - trailing: 16) - return configuration - }() // MARK: - Lifecycle override func setHierarchy() { super.setHierarchy() - self.addSubviews(weNeedYourAddressLabel, - doLocalVerificationLabel, - verifyNewLocalButton, + self.addSubviews(backgroundImageView, + titleLabel, + descriptionLabel, + oneSecondLabel, nextButton) } override func setLayout() { super.setLayout() - weNeedYourAddressLabel.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*32) - $0.horizontalEdges.equalToSuperview().inset(ScreenUtils.widthRatio*20) - $0.height.equalTo(56) + backgroundImageView.snp.makeConstraints { + $0.size.equalTo(ScreenUtils.heightRatio*480) + $0.centerX.equalToSuperview() + $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*256) + } + + titleLabel.snp.makeConstraints { + $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*455) + $0.centerX.equalToSuperview() + $0.height.equalTo(68) } - doLocalVerificationLabel.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*96) - $0.horizontalEdges.equalToSuperview().inset(ScreenUtils.widthRatio*20) - $0.height.equalTo(18) + descriptionLabel.snp.makeConstraints { + $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*535) + $0.centerX.equalToSuperview() + $0.height.equalTo(20) } - verifyNewLocalButton.snp.makeConstraints { - $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*146) + oneSecondLabel.snp.makeConstraints { + $0.top.equalToSuperview().inset(ScreenUtils.heightRatio*613) $0.centerX.equalToSuperview() - $0.horizontalEdges.equalToSuperview().inset(ScreenUtils.widthRatio*20) - $0.height.equalTo(ScreenUtils.heightRatio*52) + $0.height.equalTo(20) } nextButton.snp.makeConstraints { - $0.bottom.equalToSuperview().inset(ScreenUtils.heightRatio*36) - $0.horizontalEdges.equalToSuperview().inset(ScreenUtils.widthRatio*20) - $0.height.equalTo(52) + $0.bottom.equalToSuperview().inset(21+ScreenUtils.heightRatio*16) + $0.horizontalEdges.equalToSuperview().inset(ScreenUtils.widthRatio*16) + $0.height.equalTo(54) } } @@ -79,39 +75,26 @@ final class LocalVerificationView: BaseView { override func setStyle() { super.setStyle() - weNeedYourAddressLabel.do { - $0.setLabel(text: StringLiterals.LocalVerification.needLocalVerification, - style: .h6, - color: .acWhite) + backgroundImageView.do { + $0.image = .imgBackgroundLocalCertification } - doLocalVerificationLabel.do { - $0.setLabel(text: StringLiterals.LocalVerification.doLocalVerification, - style: .b3, - color: .gray300) + titleLabel.do { + $0.setLabel(text: StringLiterals.LocalVerification.title, + style: .t1SB, + alignment: .center) } - verifyNewLocalButton.do { - $0.configuration = verifyNewLocalButtonConfiguration - $0.contentHorizontalAlignment = .leading - $0.backgroundColor = .gray700 - $0.roundedButton(cornerRadius: 4, maskedCorners: [.layerMaxXMaxYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMinXMinYCorner]) - $0.layer.borderWidth = 1 - $0.layer.borderColor = UIColor(resource: .gray800).cgColor -// $0.setImage(.icRadio, for: .normal) - $0.setImage(.icRadioPressed, for: .normal) - $0.setPartialTitle(fullText: StringLiterals.LocalVerification.new + StringLiterals.LocalVerification.verifyLocal, - textStyles: [(StringLiterals.LocalVerification.new, .t5SB, .primaryDefault), (StringLiterals.LocalVerification.verifyLocal, .t5SB, .acWhite)]) - $0.isUserInteractionEnabled = false + descriptionLabel.do { + $0.setLabel(text: StringLiterals.LocalVerification.description, + style: .b1R, + color: .gray50) } - nextButton.do { - $0.setAttributedTitle(text: StringLiterals.LocalVerification.next, - style: .h8, - color: .acWhite, - for: .normal) - $0.backgroundColor = .gray500 - $0.roundedButton(cornerRadius: 6, maskedCorners: [.layerMaxXMaxYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMinXMinYCorner]) + oneSecondLabel.do { + $0.setLabel(text: StringLiterals.LocalVerification.oneSecond, + style: .b1R, + color: .gray500) } } diff --git a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationViewController.swift b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationViewController.swift index 899c6deb..31f21bac 100644 --- a/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationViewController.swift +++ b/ACON-iOS/ACON-iOS/Presentation/LocalVerification/View/LocalVerificationViewController.swift @@ -10,7 +10,7 @@ import UIKit import SnapKit import Then -class LocalVerificationViewController: BaseNavViewController { +class LocalVerificationViewController: BaseViewController { // MARK: - UI Properties @@ -45,7 +45,7 @@ class LocalVerificationViewController: BaseNavViewController { override func setHierarchy() { super.setHierarchy() - self.contentView.addSubview(localVerificationView) + self.view.addSubview(localVerificationView) } override func setLayout() { @@ -56,18 +56,7 @@ class LocalVerificationViewController: BaseNavViewController { } } - override func setStyle() { - super.setStyle() - - if localVerificationViewModel.flowType == .adding || localVerificationViewModel.flowType == .switching { - self.setBackButton() - } - } - func addTarget() { - localVerificationView.verifyNewLocalButton.addTarget(self, - action: #selector(verifyLocationButtonTapped), - for: .touchUpInside) localVerificationView.nextButton.addTarget(self, action: #selector(nextButtonTapped), for: .touchUpInside) @@ -117,15 +106,6 @@ private extension LocalVerificationViewController { private extension LocalVerificationViewController { - @objc - func verifyLocationButtonTapped() { - localVerificationView.verifyNewLocalButton.isSelected.toggle() - let isSelected = localVerificationView.verifyNewLocalButton.isSelected - localVerificationView.verifyNewLocalButton.configuration?.baseBackgroundColor = isSelected ? .gray700 : .gray900 -// localVerificationView.nextButton.isEnabled = isSelected - localVerificationView.nextButton.backgroundColor = isSelected ? .gray500 : .gray800 - } - @objc func nextButtonTapped() { AmplitudeManager.shared.trackEventWithProperties(AmplitudeLiterals.EventName.areaVerified, properties: ["click_area_next?": true]) diff --git a/ACON-iOS/ACON-iOS/Presentation/Onboarding/View/OnboardingView.swift b/ACON-iOS/ACON-iOS/Presentation/Onboarding/View/OnboardingView.swift index 8b9b0727..4c4b7532 100644 --- a/ACON-iOS/ACON-iOS/Presentation/Onboarding/View/OnboardingView.swift +++ b/ACON-iOS/ACON-iOS/Presentation/Onboarding/View/OnboardingView.swift @@ -23,7 +23,6 @@ final class OnboardingView: BaseView { let lightImageView: UIImageView = UIImageView() - // TODO: - cornerradius 12 좀 작아보임, 30은 돼야 하나 var startButton: ACButton = ACButton(style: GlassButton(glassmorphismType: .buttonGlassDefault, buttonType: .full_12_t4SB), title: StringLiterals.Onboarding.start) private let dislikeFoodCollectionViewFlowLayout: UICollectionViewFlowLayout = { diff --git a/ACON-iOS/Podfile.lock b/ACON-iOS/Podfile.lock index f4238a0a..e84fb40d 100644 --- a/ACON-iOS/Podfile.lock +++ b/ACON-iOS/Podfile.lock @@ -1,6 +1,6 @@ PODS: - NMapsGeometry (1.0.2) - - NMapsMap (3.19.0): + - NMapsMap (3.21.0): - NMapsGeometry DEPENDENCIES: @@ -13,7 +13,7 @@ SPEC REPOS: SPEC CHECKSUMS: NMapsGeometry: 4e02554fa9880ef02ed96b075dc84355d6352479 - NMapsMap: 99c10429d93340780b6f88d3fc7c0a3850b43664 + NMapsMap: 8e7e35c2446e7c4a88d6dd0d64aa0d1de903e4f0 PODFILE CHECKSUM: 58b20e2589abf047490b24b99cebded58dae3ce2