diff --git a/HealthFoodMe/HealthFoodMe.xcodeproj/project.pbxproj b/HealthFoodMe/HealthFoodMe.xcodeproj/project.pbxproj index 77829967..2887b6a7 100644 --- a/HealthFoodMe/HealthFoodMe.xcodeproj/project.pbxproj +++ b/HealthFoodMe/HealthFoodMe.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 2EB23785D4711C41BE97BA3F /* Pods_HealthFoodMe.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14DC488961BE98CD8C010993 /* Pods_HealthFoodMe.framework */; }; 3B089C4A287D877B00DA80B9 /* GodoB.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3B089C49287D876F00DA80B9 /* GodoB.ttf */; }; 3B089C4B287D877F00DA80B9 /* GodoB.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3B089C48287D876F00DA80B9 /* GodoB.otf */; }; 3B0B25542876BBE400950539 /* NotoSansCJKkr-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3B0B254E2876BBE300950539 /* NotoSansCJKkr-Regular.otf */; }; @@ -22,13 +21,13 @@ 3BC01F81287E923E006C2181 /* BlogReviewTab.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3BC01F80287E923E006C2181 /* BlogReviewTab.storyboard */; }; 3BCC441E28745FD800661A12 /* SocialLoginVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BCC441D28745FD800661A12 /* SocialLoginVC.swift */; }; 3BCC442028745FE500661A12 /* SocialLogin.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3BCC441F28745FE500661A12 /* SocialLogin.storyboard */; }; + 5886D49E10282855ADBDE143 /* Pods_HealthFoodMe.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 142C37AC02B7DBB941359F4B /* Pods_HealthFoodMe.framework */; }; 69028BA62874673600373984 /* MenuCellCVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69028BA52874673600373984 /* MenuCellCVC.swift */; }; 69028BA82874675800373984 /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69028BA72874675800373984 /* MenuView.swift */; }; 69028BAA287467F100373984 /* MenuDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69028BA9287467F100373984 /* MenuDetailView.swift */; }; 69028BAC2874681700373984 /* MenuTabVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69028BAB2874681700373984 /* MenuTabVC.swift */; }; 69028BB02874A60E00373984 /* HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69028BAF2874A60E00373984 /* HeaderView.swift */; }; 690AB5492875C1B200DE72D4 /* MenuDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 690AB5482875C1B200DE72D4 /* MenuDataModel.swift */; }; - 695758B7287D7B6700E36789 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 695758B6287D7B6700E36789 /* Config.swift */; }; 695758B9287D7C0B00E36789 /* MenuTab.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 695758B8287D7C0B00E36789 /* MenuTab.storyboard */; }; A938BB8E287D221200B8DE07 /* Search.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A938BB8D287D221200B8DE07 /* Search.storyboard */; }; A938BB90287D222800B8DE07 /* MainDetail.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A938BB8F287D222800B8DE07 /* MainDetail.storyboard */; }; @@ -129,10 +128,16 @@ EBF66B082872AF5B00DE0ED1 /* SampleEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF66B072872AF5B00DE0ED1 /* SampleEntity.swift */; }; EBF66B0A2872B21F00DE0ED1 /* StringLiterals.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF66B092872B21F00DE0ED1 /* StringLiterals.swift */; }; EBF66B0C2872B4FE00DE0ED1 /* StoryboardLiterals.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF66B0B2872B4FE00DE0ED1 /* StoryboardLiterals.swift */; }; + FD58291A287DC39A00CE62E8 /* mapContainerViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD582917287DC39A00CE62E8 /* mapContainerViewDelegateProxy.swift */; }; + FD58291B287DC39A00CE62E8 /* mapContainerView + Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD582918287DC39A00CE62E8 /* mapContainerView + Reactive.swift */; }; + FD58291C287DC39A00CE62E8 /* mapContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD582919287DC39A00CE62E8 /* mapContainerView.swift */; }; + FD89904F287DC4F400144E07 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD89904E287DC4F400144E07 /* Config.swift */; }; + FDA54A3B287DEAB2009D5BCE /* CustomSegementControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDA54A3A287DEAB2009D5BCE /* CustomSegementControl.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 14DC488961BE98CD8C010993 /* Pods_HealthFoodMe.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HealthFoodMe.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0CC83077EBB8A80956139111 /* Pods-HealthFoodMe.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HealthFoodMe.release.xcconfig"; path = "Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe.release.xcconfig"; sourceTree = ""; }; + 142C37AC02B7DBB941359F4B /* Pods_HealthFoodMe.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HealthFoodMe.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B089C48287D876F00DA80B9 /* GodoB.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = GodoB.otf; sourceTree = ""; }; 3B089C49287D876F00DA80B9 /* GodoB.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = GodoB.ttf; sourceTree = ""; }; 3B0B254D28757C7100950539 /* HealthFoodMe.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HealthFoodMe.entitlements; sourceTree = ""; }; @@ -148,13 +153,13 @@ 3BC01F80287E923E006C2181 /* BlogReviewTab.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = BlogReviewTab.storyboard; sourceTree = ""; }; 3BCC441D28745FD800661A12 /* SocialLoginVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialLoginVC.swift; sourceTree = ""; }; 3BCC441F28745FE500661A12 /* SocialLogin.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = SocialLogin.storyboard; sourceTree = ""; }; + 489A65A68E12AA2585E17522 /* Pods-HealthFoodMe.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HealthFoodMe.debug.xcconfig"; path = "Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe.debug.xcconfig"; sourceTree = ""; }; 69028BA52874673600373984 /* MenuCellCVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuCellCVC.swift; sourceTree = ""; }; 69028BA72874675800373984 /* MenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = ""; }; 69028BA9287467F100373984 /* MenuDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuDetailView.swift; sourceTree = ""; }; 69028BAB2874681700373984 /* MenuTabVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuTabVC.swift; sourceTree = ""; }; 69028BAF2874A60E00373984 /* HeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderView.swift; sourceTree = ""; }; 690AB5482875C1B200DE72D4 /* MenuDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuDataModel.swift; sourceTree = ""; }; - 695758B6287D7B6700E36789 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; 695758B8287D7C0B00E36789 /* MenuTab.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = MenuTab.storyboard; sourceTree = ""; }; A938BB8D287D221200B8DE07 /* Search.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Search.storyboard; sourceTree = ""; }; A938BB8F287D222800B8DE07 /* MainDetail.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = MainDetail.storyboard; sourceTree = ""; }; @@ -163,7 +168,6 @@ A9E593C62874266200B0F8B5 /* SearchRecent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecent.swift; sourceTree = ""; }; A9E593CE2876C26900B0F8B5 /* Color.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Color.xcassets; sourceTree = ""; }; A9E593D0287818E900B0F8B5 /* SearchTVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTVC.swift; sourceTree = ""; }; - E71673C053B2E49E39F1AADB /* Pods-HealthFoodMe.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HealthFoodMe.release.xcconfig"; path = "Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe.release.xcconfig"; sourceTree = ""; }; EB033E83287B5BE300C48FB9 /* StarRatingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StarRatingView.swift; sourceTree = ""; }; EB085ED628716E1900361837 /* HealthFoodMe.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HealthFoodMe.app; sourceTree = BUILT_PRODUCTS_DIR; }; EB085EE728716E1B00361837 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -258,7 +262,12 @@ EBF66B072872AF5B00DE0ED1 /* SampleEntity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleEntity.swift; sourceTree = ""; }; EBF66B092872B21F00DE0ED1 /* StringLiterals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringLiterals.swift; sourceTree = ""; }; EBF66B0B2872B4FE00DE0ED1 /* StoryboardLiterals.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardLiterals.swift; sourceTree = ""; }; + FD582917287DC39A00CE62E8 /* mapContainerViewDelegateProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = mapContainerViewDelegateProxy.swift; sourceTree = ""; }; + FD582918287DC39A00CE62E8 /* mapContainerView + Reactive.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "mapContainerView + Reactive.swift"; sourceTree = ""; }; + FD582919287DC39A00CE62E8 /* mapContainerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = mapContainerView.swift; sourceTree = ""; }; + FD89904E287DC4F400144E07 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; FB08F925E37E9FAB6970F6A9 /* Pods-HealthFoodMe.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HealthFoodMe.debug.xcconfig"; path = "Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe.debug.xcconfig"; sourceTree = ""; }; + FDA54A3A287DEAB2009D5BCE /* CustomSegementControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomSegementControl.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -266,7 +275,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2EB23785D4711C41BE97BA3F /* Pods_HealthFoodMe.framework in Frameworks */, + 5886D49E10282855ADBDE143 /* Pods_HealthFoodMe.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -378,6 +387,14 @@ path = Views; sourceTree = ""; }; + 9BB188F7D898EEB7C5ABA8BD /* Frameworks */ = { + isa = PBXGroup; + children = ( + 142C37AC02B7DBB941359F4B /* Pods_HealthFoodMe.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; A9325272287D24CD001EDF50 /* Search */ = { isa = PBXGroup; children = ( @@ -430,19 +447,11 @@ path = Object; sourceTree = ""; }; - AED78D77F3472DE575D5B1A2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 14DC488961BE98CD8C010993 /* Pods_HealthFoodMe.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; E3F60CBC9B890A7FB4D4AAAF /* Pods */ = { isa = PBXGroup; children = ( - FB08F925E37E9FAB6970F6A9 /* Pods-HealthFoodMe.debug.xcconfig */, - E71673C053B2E49E39F1AADB /* Pods-HealthFoodMe.release.xcconfig */, + 489A65A68E12AA2585E17522 /* Pods-HealthFoodMe.debug.xcconfig */, + 0CC83077EBB8A80956139111 /* Pods-HealthFoodMe.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -451,6 +460,7 @@ isa = PBXGroup; children = ( EB033E83287B5BE300C48FB9 /* StarRatingView.swift */, + FDA54A3A287DEAB2009D5BCE /* CustomSegementControl.swift */, ); path = "UI Components"; sourceTree = ""; @@ -461,7 +471,7 @@ EB085ED828716E1900361837 /* HealthFoodMe */, EB085ED728716E1900361837 /* Products */, E3F60CBC9B890A7FB4D4AAAF /* Pods */, - AED78D77F3472DE575D5B1A2 /* Frameworks */, + 9BB188F7D898EEB7C5ABA8BD /* Frameworks */, ); sourceTree = ""; }; @@ -744,6 +754,9 @@ EBD19260287DBC0C00EA053E /* Views */ = { isa = PBXGroup; children = ( + FD582919287DC39A00CE62E8 /* mapContainerView.swift */, + FD582917287DC39A00CE62E8 /* mapContainerViewDelegateProxy.swift */, + FD582918287DC39A00CE62E8 /* mapContainerView + Reactive.swift */, EBD19261287DBC1800EA053E /* MapDetailSummaryView.swift */, ); path = Views; @@ -947,8 +960,8 @@ EBF66A8B287227F500DE0ED1 /* Environment */ = { isa = PBXGroup; children = ( + FD89904E287DC4F400144E07 /* Config.swift */, EBF66A8C287227F500DE0ED1 /* NetworkConstants.swift */, - 695758B6287D7B6700E36789 /* Config.swift */, ); path = Environment; sourceTree = ""; @@ -1069,12 +1082,12 @@ isa = PBXNativeTarget; buildConfigurationList = EB085EEA28716E1B00361837 /* Build configuration list for PBXNativeTarget "HealthFoodMe" */; buildPhases = ( - EA402D2917C481F372EF3E0F /* [CP] Check Pods Manifest.lock */, + 40BAC3ABC541EA4CA066481E /* [CP] Check Pods Manifest.lock */, EB085ED228716E1900361837 /* Sources */, EB085ED328716E1900361837 /* Frameworks */, EB085ED428716E1900361837 /* Resources */, EB6A44C5287365E400749582 /* ShellScript */, - F5536ACFA7D238A1253C5861 /* [CP] Embed Pods Frameworks */, + 096883CAE67A2496108CA711 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -1149,29 +1162,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - EA402D2917C481F372EF3E0F /* [CP] Check Pods Manifest.lock */ = { + 096883CAE67A2496108CA711 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-HealthFoodMe-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - EB6A44C5287365E400749582 /* ShellScript */ = { + 40BAC3ABC541EA4CA066481E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1179,31 +1187,36 @@ inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-HealthFoodMe-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "${PODS_ROOT}/SwiftLint/swiftlint\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - F5536ACFA7D238A1253C5861 /* [CP] Embed Pods Frameworks */ = { + EB6A44C5287365E400749582 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HealthFoodMe/Pods-HealthFoodMe-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "${PODS_ROOT}/SwiftLint/swiftlint\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -1215,6 +1228,7 @@ EBF66AFF287227F500DE0ED1 /* makeAlert.swift in Sources */, EBF66AF3287227F500DE0ED1 /* applyShadow.swift in Sources */, EB6A44D628737CC400749582 /* MainDetailEntity.swift in Sources */, + FD89904F287DC4F400144E07 /* Config.swift in Sources */, EB6A4515287425F900749582 /* DetailTabTVC.swift in Sources */, EBF66AE5287227F500DE0ED1 /* NetworkConstants.swift in Sources */, EB6A44F32873BED500749582 /* MainMapEntity.swift in Sources */, @@ -1228,6 +1242,7 @@ EBF66AC5287227F500DE0ED1 /* UITextField+.swift in Sources */, EBF66AE6287227F500DE0ED1 /* AuthService.swift in Sources */, EBF66AFB287227F500DE0ED1 /* setImage.swift in Sources */, + FD58291C287DC39A00CE62E8 /* mapContainerView.swift in Sources */, EBF66AF6287227F500DE0ED1 /* setRootViewController.swift in Sources */, EBF66AD4287227F500DE0ED1 /* UICollectionViewRegisterable.swift in Sources */, EB6A44D128737CC400749582 /* MainDetailUseCase.swift in Sources */, @@ -1236,6 +1251,7 @@ EBF66AF8287227F500DE0ED1 /* JsonCoder.swift in Sources */, EBF66AFA287227F500DE0ED1 /* getClassName.swift in Sources */, EBF66AE4287227F500DE0ED1 /* HeaderType.swift in Sources */, + FD58291A287DC39A00CE62E8 /* mapContainerViewDelegateProxy.swift in Sources */, EBF66ADB287227F500DE0ED1 /* LaunchInstructor.swift in Sources */, EBF66B01287227F500DE0ED1 /* PostDetail.swift in Sources */, EBF66ABC287227F500DE0ED1 /* UserDefaults+.swift in Sources */, @@ -1255,7 +1271,9 @@ EBF66AC1287227F500DE0ED1 /* UIStackView+.swift in Sources */, EBF66AF1287227F500DE0ED1 /* ShowToast.swift in Sources */, EBF66AC4287227F500DE0ED1 /* UIButton+.swift in Sources */, + FD58291B287DC39A00CE62E8 /* mapContainerView + Reactive.swift in Sources */, 695758B7287D7B6700E36789 /* Config.swift in Sources */, + FDA54A3B287DEAB2009D5BCE /* CustomSegementControl.swift in Sources */, EBF66AF0287227F500DE0ED1 /* BaseVC.swift in Sources */, EBF66B082872AF5B00DE0ED1 /* SampleEntity.swift in Sources */, EBF66B03287227F500DE0ED1 /* SignUp.swift in Sources */, @@ -1448,7 +1466,7 @@ }; EB085EEB28716E1B00361837 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB08F925E37E9FAB6970F6A9 /* Pods-HealthFoodMe.debug.xcconfig */; + baseConfigurationReference = 489A65A68E12AA2585E17522 /* Pods-HealthFoodMe.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -1471,7 +1489,7 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.healthFoodMe.release; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = HealthFoodMe_Dev; + PROVISIONING_PROFILE_SPECIFIER = healthFood_dev; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; @@ -1480,7 +1498,7 @@ }; EB085EEC28716E1B00361837 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E71673C053B2E49E39F1AADB /* Pods-HealthFoodMe.release.xcconfig */; + baseConfigurationReference = 0CC83077EBB8A80956139111 /* Pods-HealthFoodMe.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -1503,7 +1521,7 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.healthFoodMe.release; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = HealthFoodMe_Dist; + PROVISIONING_PROFILE_SPECIFIER = healthfood_distribution; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; diff --git a/HealthFoodMe/HealthFoodMe/Application/ModuleFactory/Factory/ModuleFactory.swift b/HealthFoodMe/HealthFoodMe/Application/ModuleFactory/Factory/ModuleFactory.swift index 4014106b..e5167e3a 100644 --- a/HealthFoodMe/HealthFoodMe/Application/ModuleFactory/Factory/ModuleFactory.swift +++ b/HealthFoodMe/HealthFoodMe/Application/ModuleFactory/Factory/ModuleFactory.swift @@ -11,16 +11,18 @@ protocol ModuleFactoryProtocol { // MARK: - Map func makeMainMapVC() -> MainMapVC + func makeHamburgerBarVC() -> HamburgerBarVC // MARK: - Detail func makeMainDetailVC() -> MainDetailVC + func makeMenuTabVC() -> MenuTabVC // MARK: - Search func makeSearchVC() -> SearchVC } class ModuleFactory: ModuleFactoryProtocol { - + static func resolve() -> ModuleFactory { return ModuleFactory() } @@ -36,6 +38,12 @@ class ModuleFactory: ModuleFactoryProtocol { return vc } + func makeHamburgerBarVC() -> HamburgerBarVC { + let vc = HamburgerBarVC.controllerFromStoryboard(.hamburgerBar) + + return vc + } + // MARK: - Detail func makeMainDetailVC() -> MainDetailVC { let repository = DefaultMainDetailRepository() @@ -47,6 +55,12 @@ class ModuleFactory: ModuleFactoryProtocol { return vc } + func makeMenuTabVC() -> MenuTabVC { + let vc = MenuTabVC.controllerFromStoryboard(.menuTab) + + return vc + } + // MARK: - Search func makeSearchVC() -> SearchVC { let vc = SearchVC.controllerFromStoryboard(.search) @@ -54,7 +68,6 @@ class ModuleFactory: ModuleFactoryProtocol { return vc } - // MARK: - Plan // func instantiatePlanPreviewVC(postID: Int) -> PlanPreviewVC { diff --git a/HealthFoodMe/HealthFoodMe/Data/Network/Foundation/EventLogger.swift b/HealthFoodMe/HealthFoodMe/Data/Network/Foundation/EventLogger.swift index 1d39a0e0..31f11b2e 100644 --- a/HealthFoodMe/HealthFoodMe/Data/Network/Foundation/EventLogger.swift +++ b/HealthFoodMe/HealthFoodMe/Data/Network/Foundation/EventLogger.swift @@ -30,9 +30,9 @@ class APIEventLogger: EventMonitor { switch response.result { - case .success(_): + case .success: print("3️⃣ 서버 연결 성공") - case .failure(_): + case .failure: print("3️⃣ 서버 연결 실패") print("올바른 URL인지 확인해보세요.") } diff --git a/HealthFoodMe/HealthFoodMe/Domain/Model/Map/MainMapScene/MainMapModel.swift b/HealthFoodMe/HealthFoodMe/Domain/Model/Map/MainMapScene/MainMapModel.swift index e0120433..4ceee682 100644 --- a/HealthFoodMe/HealthFoodMe/Domain/Model/Map/MainMapScene/MainMapModel.swift +++ b/HealthFoodMe/HealthFoodMe/Domain/Model/Map/MainMapScene/MainMapModel.swift @@ -7,8 +7,15 @@ import UIKit -struct MainMapModel { +struct MapPointDataModel { + let latitude: Double + let longtitude: Double + let type: PointerType +} +enum PointerType { + case normalFood + case healthFood } struct MainMapCategory { diff --git a/HealthFoodMe/HealthFoodMe/Global/Literals/StringLiterals.swift b/HealthFoodMe/HealthFoodMe/Global/Literals/StringLiterals.swift index 274b1278..8e017fa5 100644 --- a/HealthFoodMe/HealthFoodMe/Global/Literals/StringLiterals.swift +++ b/HealthFoodMe/HealthFoodMe/Global/Literals/StringLiterals.swift @@ -45,6 +45,10 @@ struct I18N { } struct Map { + struct Main { + static let searchBar = "식당, 음식 검색" + } + struct HamburgerBar { static let logout = "로그아웃" static let setting = "설정" diff --git a/HealthFoodMe/HealthFoodMe/Global/Protocols/UITableViewRegisterable.swift b/HealthFoodMe/HealthFoodMe/Global/Protocols/UITableViewRegisterable.swift index 0f0a34f9..712b81c7 100644 --- a/HealthFoodMe/HealthFoodMe/Global/Protocols/UITableViewRegisterable.swift +++ b/HealthFoodMe/HealthFoodMe/Global/Protocols/UITableViewRegisterable.swift @@ -7,8 +7,6 @@ import UIKit -//필요한 셀에 TVC.register(target:TV이름) 형태로 등록 해주기!!!! (원래는 TVC, TV위치가 반대) -//isFromNib는 true일 경우에는 Xib로 TVC 만든거고, false일 경우에는 코드로 TVC 만든거! protocol UITableViewRegisterable { static var isFromNib: Bool { get } static func register(target: UITableView) diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/Contents.json b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/Contents.json similarity index 100% rename from HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/Contents.json rename to HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/Contents.json diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet.png new file mode 100644 index 00000000..d5f186af Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet@2x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet@2x.png new file mode 100644 index 00000000..18fd676b Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet@2x.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet@3x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet@3x.png new file mode 100644 index 00000000..b3060245 Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet.imageset/icn_diet@3x.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/Contents.json b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/Contents.json new file mode 100644 index 00000000..9ab3e3f9 --- /dev/null +++ b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icn_diet_selected.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icn_diet_selected@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icn_diet_selected@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected.png new file mode 100644 index 00000000..ce8c4a15 Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected@2x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected@2x.png new file mode 100644 index 00000000..fa63d47c Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected@2x.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected@3x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected@3x.png new file mode 100644 index 00000000..adf03c22 Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_diet_selected.imageset/icn_diet_selected@3x.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/Contents.json b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/Contents.json similarity index 100% rename from HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/Contents.json rename to HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/Contents.json diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal.png new file mode 100644 index 00000000..5aca2f2f Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal@2x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal@2x.png new file mode 100644 index 00000000..33c06c47 Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal@2x.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal@3x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal@3x.png new file mode 100644 index 00000000..8ba2db0d Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal.imageset/icn_normal@3x.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/Contents.json b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/Contents.json new file mode 100644 index 00000000..24ac3d3d --- /dev/null +++ b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icn_normal_seleted.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icn_normal_seleted@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icn_normal_seleted@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted.png new file mode 100644 index 00000000..2818daf9 Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted@2x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted@2x.png new file mode 100644 index 00000000..35f5db0b Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted@2x.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted@3x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted@3x.png new file mode 100644 index 00000000..a8603b2c Binary files /dev/null and b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Map/icn_normal_seleted.imageset/icn_normal_seleted@3x.png differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet.png deleted file mode 100644 index e5e3dcf5..00000000 Binary files a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet.png and /dev/null differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet@2x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet@2x.png deleted file mode 100644 index 43f131c2..00000000 Binary files a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet@2x.png and /dev/null differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet@3x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet@3x.png deleted file mode 100644 index 339351b8..00000000 Binary files a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_diet.imageset/icn_diet@3x.png and /dev/null differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal.png deleted file mode 100644 index 89ee7a22..00000000 Binary files a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal.png and /dev/null differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal@2x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal@2x.png deleted file mode 100644 index a3f1d919..00000000 Binary files a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal@2x.png and /dev/null differ diff --git a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal@3x.png b/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal@3x.png deleted file mode 100644 index 9a70abf5..00000000 Binary files a/HealthFoodMe/HealthFoodMe/Global/Resources/Assets.xcassets/Search/icn_normal.imageset/icn_normal@3x.png and /dev/null differ diff --git a/HealthFoodMe/HealthFoodMe/Info.plist b/HealthFoodMe/HealthFoodMe/Info.plist index e0940c47..dc9a2eb8 100644 --- a/HealthFoodMe/HealthFoodMe/Info.plist +++ b/HealthFoodMe/HealthFoodMe/Info.plist @@ -2,6 +2,8 @@ + UIUserInterfaceStyle + Light UIAppFonts Pretendard-Bold.otf diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Auth/SocialLoginScene/VC/SocialLoginVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Auth/SocialLoginScene/VC/SocialLoginVC.swift index 833145bb..1efd6162 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Auth/SocialLoginScene/VC/SocialLoginVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Auth/SocialLoginScene/VC/SocialLoginVC.swift @@ -72,7 +72,7 @@ extension SocialLoginVC { if UserApi.isKakaoTalkLoginAvailable() { // 카카오톡 로그인. api 호출 결과를 클로저로 전달. UserApi.shared.loginWithKakaoTalk { (oauthToken, error) in - if let _ = error { self.showKakaoLoginFailMessage() } else { + if error != nil { self.showKakaoLoginFailMessage() } else { if let accessToken = oauthToken?.accessToken { // 엑세스 토큰 받아와서 서버에게 넘겨주는 로직 작성 @@ -83,7 +83,7 @@ extension SocialLoginVC { } } else { // 웹으로 로그인해도 똑같이 처리되도록 UserApi.shared.loginWithKakaoAccount { (oauthToken, error) in - if let _ = error { self.showKakaoLoginFailMessage() } else { + if error != nil { self.showKakaoLoginFailMessage() } else { if let accessToken = oauthToken?.accessToken { print("TOKEN", accessToken) self.postSocialLoginData(socialToken: accessToken, socialType: "KAKAO") diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Common/UI Components/CustomSegementControl.swift b/HealthFoodMe/HealthFoodMe/Presentation/Common/UI Components/CustomSegementControl.swift new file mode 100644 index 00000000..a8cb524f --- /dev/null +++ b/HealthFoodMe/HealthFoodMe/Presentation/Common/UI Components/CustomSegementControl.swift @@ -0,0 +1,107 @@ +// +// CustomSegementControl.swift +// HealthFoodMe +// +// Created by 송지훈 on 2022/07/13. +// + +import UIKit + +import SnapKit + +final class CustomSegmentControl: UIView { + + internal var areaClickEvent: ((Int) -> Void)? + internal var containerColor: UIColor = .init(red: 242/255, green: 242/255, blue: 242/255, alpha: 1) + internal var selectColor: UIColor = .white + internal var titleList: [String] = ["첫번째","두번째"] + internal var width: CGFloat = 226 + private lazy var selectedView = UIView() + private lazy var containerStackView = UIStackView() + + override init(frame: CGRect) { + super.init(frame: frame) + setUI() + setStackView() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setUI() + setStackView() + } +} + +extension CustomSegmentControl { + private func setStackView() { + containerStackView.axis = .horizontal + containerStackView.spacing = 0 + containerStackView.distribution = .fillEqually + for (index, _) in titleList.enumerated() { + let buttonContainerView = UIView() + let button = UIButton() + let titleLabel = UILabel() + + titleLabel.textAlignment = .center + titleLabel.text = titleList[index] + titleLabel.textColor = UIColor.init(red: 34/255, + green: 34/255, + blue: 34/255, + alpha: 1) + titleLabel.font = UIFont.systemFont(ofSize: 12) + buttonContainerView.addSubview(button) + buttonContainerView.addSubview(titleLabel) + + button.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + + titleLabel.snp.makeConstraints { make in + make.centerX.centerY.equalToSuperview() + make.leading.trailing.equalToSuperview() + } + + button.backgroundColor = .clear + button.tag = index + button.addTarget(self, action: #selector(buttonClicked(_:)), for: .touchUpInside) + containerStackView.addArrangedSubview(buttonContainerView) + } + } + + private func setUI() { + backgroundColor = containerColor + layer.cornerRadius = 16 + selectedView.backgroundColor = selectColor + selectedView.layer.cornerRadius = 16 + containerStackView.backgroundColor = .clear + + addSubview(selectedView) + addSubview(containerStackView) + + selectedView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(4) + make.leading.equalToSuperview().offset(4) + make.bottom.equalToSuperview().offset(-4) + make.width.equalTo( (width - 8) / CGFloat(titleList.count)) + } + containerStackView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + + @objc + func buttonClicked(_ button: UIButton) { + let generator = UIImpactFeedbackGenerator(style: .medium) + generator.impactOccurred() + let buttonTag = button.tag + areaClickEvent?(buttonTag) + let buttonWidth = (width - 8) / CGFloat(titleList.count) + selectedView.snp.updateConstraints { make in + make.leading.equalToSuperview().offset(CGFloat(buttonTag) * buttonWidth + 4) + } + + UIView.animate(withDuration: 0.3) { + self.layoutIfNeeded() + } + } +} diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Detail/MainDetailScene/Cells/DetailTabTVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Detail/MainDetailScene/Cells/DetailTabTVC.swift index 5adaf549..f773dbb0 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Detail/MainDetailScene/Cells/DetailTabTVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Detail/MainDetailScene/Cells/DetailTabTVC.swift @@ -79,10 +79,6 @@ extension DetailTabTVC { // MARK: - Initializer - func initCell() { - - } - func scrollToSelectedIndex(index: Int) { containerCollectionView.scrollToItem(at: IndexPath(item: index, section: 0), at: .centeredHorizontally, animated: true) } @@ -124,10 +120,10 @@ extension DetailTabTVC: UICollectionViewDataSource { childControllers.count > 0 { cell.addSubview(childControllers[indexPath.item].view) childControllers[indexPath.item].view.frame = cell.bounds - } else if (indexPath.item == 1 && childControllers.count > 1) { + } else if indexPath.item == 1 && childControllers.count > 1 { cell.addSubview(childControllers[indexPath.item].view) childControllers[indexPath.item].view.frame = cell.bounds - } else if (indexPath.item == 2 && childControllers.count > 2) { + } else if indexPath.item == 2 && childControllers.count > 2 { cell.addSubview(childControllers[indexPath.item].view) childControllers[indexPath.item].view.frame = cell.bounds } diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Detail/MainDetailScene/VC/MainDetailVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Detail/MainDetailScene/VC/MainDetailVC.swift index 65d42c37..b7753911 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Detail/MainDetailScene/VC/MainDetailVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Detail/MainDetailScene/VC/MainDetailVC.swift @@ -19,7 +19,7 @@ class MainDetailVC: UIViewController { var viewModel: MainDetailViewModel! private var detailTabTVC = DetailTabTVC() private var detailTabTitleHeader = DetailTabTitleHeader() - private var childVC = ModuleFactory.resolve().makeMainMapVC() + private var childVC = ModuleFactory.resolve().makeMenuTabVC() // MARK: - UI Components @@ -171,6 +171,11 @@ extension MainDetailVC: UITableViewDataSource { } else { guard let cell = tableView.dequeueReusableCell(withIdentifier: DetailTabTVC.className, for: indexPath) as? DetailTabTVC else { return UITableViewCell() } detailTabTVC = cell + + if childVC is MenuTabVC { + childVC.delegate = self + } + self.addChild(childVC) cell.receiveChildVC(childVC: childVC) cell.scrollRatio.asDriver(onErrorJustReturn: 0) @@ -185,3 +190,17 @@ extension MainDetailVC: UITableViewDataSource { } } } + +extension MainDetailVC: ScrollDeliveryDelegate { + + // TODO: - 이 부분 touchesBegan으로 해보자 + + func scrollStarted(velocity: CGFloat, scrollView: UIScrollView) { + if velocity < 0 { + self.mainTableView.setContentOffset(CGPoint(x: 0, y: 240), animated: true) + if mainTableView.contentOffset.y < 230 { + scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true) + } + } + } +} diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Detail/MenuTabScene/VC/MenuTabVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Detail/MenuTabScene/VC/MenuTabVC.swift index acd20839..d55184c8 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Detail/MenuTabScene/VC/MenuTabVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Detail/MenuTabScene/VC/MenuTabVC.swift @@ -9,11 +9,16 @@ import UIKit import SnapKit +protocol ScrollDeliveryDelegate: AnyObject { + func scrollStarted(velocity: CGFloat, scrollView: UIScrollView) +} + final class MenuTabVC: UIViewController { // MARK: - Properties var isMenu: Bool = true + weak var delegate: ScrollDeliveryDelegate? // MARK: - UI Components @@ -27,6 +32,7 @@ final class MenuTabVC: UIViewController { let cv = UICollectionView(frame: .zero, collectionViewLayout: layout) cv.showsVerticalScrollIndicator = false + cv.backgroundColor = .helfmeWhite return cv }() @@ -34,6 +40,7 @@ final class MenuTabVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() + setUI() setLayout() setDelegate() registerCell() @@ -49,6 +56,10 @@ extension MenuTabVC { headerView.delegate = self } + private func setUI() { + view.backgroundColor = .helfmeWhite + } + private func setLayout() { view.addSubviews(headerView, menuCV) headerView.snp.makeConstraints { make in @@ -68,7 +79,13 @@ extension MenuTabVC { } extension MenuTabVC: UICollectionViewDelegate { - + func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { + let yVelocity = scrollView.panGestureRecognizer .velocity(in: scrollView).y + delegate?.scrollStarted(velocity: yVelocity, scrollView: scrollView) + } + func scrollViewDidScroll(_ scrollView: UIScrollView) { + + } } extension MenuTabVC: UICollectionViewDataSource { @@ -96,7 +113,7 @@ extension MenuTabVC: UICollectionViewDelegateFlowLayout { } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { - return UIEdgeInsets(top: 0, left: 20, bottom: 15, right: 20) + return UIEdgeInsets(top: 0, left: 20, bottom: 60, right: 20) } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Map/HamburgerBarScene/HamburgerBarVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Map/HamburgerBarScene/HamburgerBarVC.swift index df88a271..b86a291a 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Map/HamburgerBarScene/HamburgerBarVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Map/HamburgerBarScene/HamburgerBarVC.swift @@ -17,7 +17,6 @@ class HamburgerBarVC: UIViewController { var hambergurBarViewVelocity = CGPoint(x: 0, y: 0) var name: String? = "배부른 현우는 행복해요" private let screenWidth = UIScreen.main.bounds.width - private lazy var hamburgerBarButton = UIButton() private var menuButtons: [UIButton] = [] private let buttonTitles: [String] = ["스크랩한 식당", "내가 쓴 리뷰", "가게 제보하기", "수정사항 제보하기"] @@ -124,14 +123,10 @@ extension HamburgerBarVC { private func setUI() { setButtons() setDivindingView() + self.view.backgroundColor = .clear } private func setButtons() { - hamburgerBarButton.setTitleColor(.helfmeBlack, for: .normal) - hamburgerBarButton.setTitle("햄버거바", for: .normal) - hamburgerBarButton.press { self.showHamburgerBarWithAnimation() - } - for buttonIndex in 0...3 { let button = UIButton() button.setTitle(buttonTitles[buttonIndex], for: .normal) @@ -156,19 +151,14 @@ extension HamburgerBarVC { } private func setLayout() { - view.addSubviews(hamburgerBarButton, hamburgerBarView - ) + view.addSubviews(hamburgerBarView + ) hamburgerBarView.addSubviews(helloLabel, editNameButton, storeButtonStackView, reportButtonStackView, settingButton, logoutButton, dividingLineViews[0], dividingLineViews[1], dividingLineViews[2]) - hamburgerBarButton.snp.makeConstraints { make in - make.trailing.equalTo(view.safeAreaLayoutGuide).inset(20) - make.top.equalTo(view.safeAreaLayoutGuide).inset(100) - } - hamburgerBarView.snp.makeConstraints { make in make.width.equalToSuperview().multipliedBy(0.71) make.height.equalToSuperview() @@ -233,7 +223,7 @@ extension HamburgerBarVC { self.hamburgerBarView.snp.updateConstraints { make in make.trailing.equalToSuperview().inset(screenWidth - hamburgerViewWidth) } - UIView.animate(withDuration: 0.4) { + UIView.animate(withDuration: 0.3) { self.hamburgerBarView.transform = CGAffineTransform(translationX: 0, y: 0) self.view.backgroundColor = .helfmeBlack.withAlphaComponent(0.4) self.view.layoutIfNeeded() @@ -245,10 +235,11 @@ extension HamburgerBarVC { self.hamburgerBarView.snp.updateConstraints { make in make.trailing.equalToSuperview().inset(screenWidth) } - - UIView.animate(withDuration: 0.4) { - self.view.backgroundColor = .helfmeWhite + UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseIn) { + self.view.backgroundColor = .clear self.view.layoutIfNeeded() + } completion: { _ in + self.dismiss(animated: false) } } diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/VC/MainMapVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/VC/MainMapVC.swift index 382ec878..4c728f7c 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/VC/MainMapVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/VC/MainMapVC.swift @@ -35,8 +35,9 @@ class MainMapVC: UIViewController { let bt = UIButton() bt.setImage(ImageLiterals.Map.menuIcon, for: .normal) bt.addAction(UIAction(handler: { _ in - let nextVC = ModuleFactory.resolve().makeMainDetailVC() - self.navigationController?.pushViewController(nextVC, animated: true) + let nextVC = ModuleFactory.resolve().makeHamburgerBarVC() + nextVC.modalPresentationStyle = .overFullScreen + self.present(nextVC, animated: false) }), for: .touchUpInside) bt.backgroundColor = .helfmeWhite bt.clipsToBounds = true @@ -56,7 +57,7 @@ class MainMapVC: UIViewController { private let searchLabel: UILabel = { let lb = UILabel() - lb.text = "식당, 음식 검색" + lb.text = I18N.Map.Main.searchBar lb.textColor = .helfmeGray2 lb.font = .NotoRegular(size: 15) return lb @@ -93,6 +94,7 @@ class MainMapVC: UIViewController { setTapGesture() setDelegate() registerCell() + setPanGesture() self.bindViewModels() } @@ -153,14 +155,17 @@ extension MainMapVC { mapDetailSummaryView.snp.makeConstraints { make in make.leading.trailing.equalToSuperview() - make.top.equalToSuperview().inset(500) - make.height.equalTo(500) + make.top.equalToSuperview().inset(UIScreen.main.bounds.height - 189) + make.height.equalTo(UIScreen.main.bounds.height + 300) } } private func setTapGesture() { let tapGesture = UITapGestureRecognizer(target: self, action: #selector(presentSearchVC)) searchBar.addGestureRecognizer(tapGesture) + + let tapBottomSheet = UITapGestureRecognizer(target: self, action: #selector(PushDetailVC)) + mapDetailSummaryView.addGestureRecognizer(tapBottomSheet) } private func setDelegate() { @@ -172,6 +177,44 @@ extension MainMapVC { MenuCategoryCVC.register(target: categoryCollectionView) } + private func setPanGesture() { + let panGesture = UIPanGestureRecognizer() + mapDetailSummaryView.addGestureRecognizer(panGesture) + panGesture.rx.event.asDriver { _ in .never() } + .drive(onNext: { [weak self] sender in + let summaryViewTranslation = sender.translation(in: self?.mapDetailSummaryView) + print(self?.mapDetailSummaryView.frame.origin.y ?? 0) + switch sender.state { + case .changed: + UIView.animate(withDuration: 0.1) { + self?.mapDetailSummaryView.transform = CGAffineTransform(translationX: 0, y: summaryViewTranslation.y) + } + case .ended: + if summaryViewTranslation.y < -90 + || (self?.mapDetailSummaryView.frame.origin.y ?? 40 < 30) { + self?.mapDetailSummaryView.snp.updateConstraints { make in + make.top.equalToSuperview().inset(44) + } + UIView.animate(withDuration: 0.4) { + self?.mapDetailSummaryView.transform = CGAffineTransform(translationX: 0, y: 0) + self?.view.layoutIfNeeded() + } + } else { + let summaryViewHeight: CGFloat = 189 + self?.mapDetailSummaryView.snp.updateConstraints { make in + make.top.equalToSuperview().inset(UIScreen.main.bounds.height - summaryViewHeight) + } + UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseIn) { + self?.mapDetailSummaryView.transform = CGAffineTransform(translationX: 0, y: 0) + self?.view.layoutIfNeeded() + } + } + default: + break + } + }).disposed(by: disposeBag) + } + private func bindViewModels() { let input = MainMapViewModel.Input() let output = self.viewModel.transform(from: input, disposeBag: self.disposeBag) @@ -183,6 +226,12 @@ extension MainMapVC { @objc private func presentSearchVC() { + let nextVC = ModuleFactory.resolve().makeSearchVC() + self.navigationController?.pushViewController(nextVC, animated: true) + } + + @objc + private func PushDetailVC() { let nextVC = ModuleFactory.resolve().makeMainDetailVC() self.navigationController?.pushViewController(nextVC, animated: true) } @@ -191,7 +240,7 @@ extension MainMapVC { // MARK: - CollectionView Delegate extension MainMapVC: UICollectionViewDelegate { - + } extension MainMapVC: UICollectionViewDelegateFlowLayout { diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerView + Reactive.swift b/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerView + Reactive.swift new file mode 100644 index 00000000..ae372d11 --- /dev/null +++ b/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerView + Reactive.swift @@ -0,0 +1,26 @@ +// +// NaverMapContainerView + Reactive.swift +// NaverMap + RxDelegate +// +// Created by 송지훈 on 2022/07/12. +// + +import NMapsMap +import RxCocoa +import RxSwift + +extension Reactive where Base: NaverMapContainerView { + internal var pointList: Binder<[MapPointDataModel]> { + return Binder(self.base) { containerView, points in + containerView.pointList.accept(points) + } + } +} + +extension Reactive where Base: NaverMapContainerView { + internal var currentSelectPoint: Binder { + return Binder(self.base) { containerView, point in + containerView.setSelectPoint.accept(point) + } + } +} diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerView.swift b/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerView.swift new file mode 100644 index 00000000..46ab8d68 --- /dev/null +++ b/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerView.swift @@ -0,0 +1,126 @@ +// +// NaverMapContainerView.swift +// NaverMap + RxDelegate +// +// Created by 송지훈 on 2022/07/12. +// + +import Foundation +import NMapsMap +import RxRelay +import RxSwift + +final class NaverMapContainerView: UIView { + + private let disposeBag = DisposeBag() + private var markers = [NMFMarker]() + private var previousMarker: NMFMarker? + private var selectedMarker: NMFMarker? + var naverMapView = NMFNaverMapView() + var delegate: NMFMapViewTouchDelegate? + var pointList = PublishRelay<[MapPointDataModel]>() + var setSelectPoint = PublishRelay() + var disableSelectPoint = PublishRelay() + + override init(frame: CGRect) { + super.init(frame: frame) + bindRelay() + setUI() + moveCameraPosition(NMGLatLng(lat: 37.5666102, lng: 126.9783881)) + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + bindRelay() + setUI() + moveCameraPosition(NMGLatLng(lat: 37.5666102, lng: 126.9783881)) + } +} + +extension NaverMapContainerView { + private func setUI() { + naverMapView = NMFNaverMapView(frame: self.frame) + naverMapView.showLocationButton = true + naverMapView.mapView.positionMode = .compass + + addSubview(naverMapView) + + naverMapView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + + } + + private func moveCameraPosition(_ point: NMGLatLng) { + let cameraUpdate = NMFCameraUpdate(scrollTo: point) + cameraUpdate.animation = .fly + cameraUpdate.animationDuration = 2 + naverMapView.mapView.moveCamera(cameraUpdate) + } + + private func bindRelay() { + pointList.subscribe(onNext: { [weak self] pointList in + guard let self = self else { return } + self.setPointMarkers(pointList) + }).disposed(by: self.disposeBag) + + setSelectPoint.subscribe(onNext: { [weak self] selectedPoint in + self?.setClickedMarker(selectedPoint) + }).disposed(by: self.disposeBag) + + disableSelectPoint.subscribe(onNext: { [weak self] in + self?.disableAllMarker() + }).disposed(by: self.disposeBag) + + } + + private func setPointMarkers(_ points: [MapPointDataModel]) { + DispatchQueue.global(qos: .default).async { + for point in points { + let marker = NMFMarker() + marker.position = NMGLatLng.init(lat: point.latitude, lng: point.longtitude) + self.setMarkState(mark: marker, selectState: false) + marker.touchHandler = { _ in + if let seletedMark = self.selectedMarker { + self.setMarkState(mark: seletedMark, selectState: false) + } + self.setMarkState(mark: marker, selectState: true) + self.setSelectPoint.accept(point) + self.selectedMarker = marker + return true + } + self.markers.append(marker) + } + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + for marker in self.markers { + marker.mapView = self.naverMapView.mapView + } + } + } + } + + private func setClickedMarker(_ selectedPoint: MapPointDataModel) { + let NMGPosition = NMGLatLng(lat: selectedPoint.latitude, + lng: selectedPoint.longtitude) + guard let marker = markers.filter({ point in + return point.position == NMGPosition + }).first else { return } + moveCameraPosition(NMGPosition) + if let seletedMark = self.selectedMarker { + setMarkState(mark: seletedMark, selectState: false) + } + setMarkState(mark: marker, selectState: true) + self.selectedMarker = marker + } + + private func disableAllMarker() { + guard selectedMarker != nil else { return } + setMarkState(mark: selectedMarker!, selectState: false) + } + + private func setMarkState(mark: NMFMarker, selectState: Bool) { + let iconName = selectState ? "icn_normal_seleted" : "icn_normal" + mark.iconImage = NMFOverlayImage.init(image: UIImage(named: iconName) ?? UIImage()) + } +} diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerViewDelegateProxy.swift b/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerViewDelegateProxy.swift new file mode 100644 index 00000000..ebdd590a --- /dev/null +++ b/HealthFoodMe/HealthFoodMe/Presentation/Map/MainMapScene/Views/mapContainerViewDelegateProxy.swift @@ -0,0 +1,37 @@ +// +// NaverMapContainerViewDelegateProxy.swift +// NaverMap + RxDelegate +// +// Created by 송지훈 on 2022/07/12. +// + +import NMapsMap +import RxCocoa +import RxSwift + +final class NaverMapContainerViewDelegateProxy: DelegateProxy, DelegateProxyType, NMFMapViewTouchDelegate { + static func registerKnownImplementations() { + self.register { (object) -> NaverMapContainerViewDelegateProxy in + NaverMapContainerViewDelegateProxy(parentObject: object, delegateProxy: self) + } + } + + static func currentDelegate(for object: NaverMapContainerView) -> NMFMapViewTouchDelegate? { + return object.naverMapView.mapView.touchDelegate + } + + static func setCurrentDelegate(_ delegate: NMFMapViewTouchDelegate?, to object: NaverMapContainerView) { + object.naverMapView.mapView.touchDelegate = delegate + } +} + +extension Reactive where Base: NaverMapContainerView { + var delegate: DelegateProxy { + return NaverMapContainerViewDelegateProxy.proxy(for: self.base) + } + + var mapViewClicked: Observable { + return delegate.methodInvoked(#selector(NMFMapViewTouchDelegate.mapView(_:didTapMap:point:))) + .map { _ in return ()} + } +} diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Map/SocialLoginScene/VC/SocialLoginVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Map/SocialLoginScene/VC/SocialLoginVC.swift index c8095017..db87b6c1 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Map/SocialLoginScene/VC/SocialLoginVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Map/SocialLoginScene/VC/SocialLoginVC.swift @@ -38,7 +38,7 @@ extension SocialLoginVC { if UserApi.isKakaoTalkLoginAvailable() { // 카카오톡 로그인. api 호출 결과를 클로저로 전달. UserApi.shared.loginWithKakaoTalk { (oauthToken, error) in - if let _ = error { self.showKakaoLoginFailMessage() } else { + if error != nil { self.showKakaoLoginFailMessage() } else { if let accessToken = oauthToken?.accessToken { // 엑세스 토큰 받아와서 서버에게 넘겨주는 로직 작성 @@ -49,7 +49,7 @@ extension SocialLoginVC { } } else { // 웹으로 로그인해도 똑같이 처리되도록 UserApi.shared.loginWithKakaoAccount { (oauthToken, error) in - if let _ = error { self.showKakaoLoginFailMessage() } else { + if error != nil { self.showKakaoLoginFailMessage() } else { if let accessToken = oauthToken?.accessToken { print("TOKEN", accessToken) self.postSocialLoginData(socialToken: accessToken, socialType: "KAKAO") diff --git a/HealthFoodMe/HealthFoodMe/Presentation/Search/SearchScene/VC/SearchVC.swift b/HealthFoodMe/HealthFoodMe/Presentation/Search/SearchScene/VC/SearchVC.swift index 7a268394..77e7ba54 100644 --- a/HealthFoodMe/HealthFoodMe/Presentation/Search/SearchScene/VC/SearchVC.swift +++ b/HealthFoodMe/HealthFoodMe/Presentation/Search/SearchScene/VC/SearchVC.swift @@ -97,7 +97,7 @@ final class SearchVC: UIViewController { extension SearchVC { @objc func didTapBackButton() { - + self.navigationController?.popViewController(animated: true) } @objc func didTapClearButton() { diff --git a/HealthFoodMe/HealthFoodMe/Utils/buttonPress.swift b/HealthFoodMe/HealthFoodMe/Utils/buttonPress.swift index 4ebbe7f8..bb69264f 100644 --- a/HealthFoodMe/HealthFoodMe/Utils/buttonPress.swift +++ b/HealthFoodMe/HealthFoodMe/Utils/buttonPress.swift @@ -26,7 +26,7 @@ extension UIButton { func press(vibrate: Bool = false, for controlEvents: UIControl.Event = .touchUpInside, _ closure: @escaping() -> Void) { if #available(iOS 14.0, *) { - self.addAction(UIAction { (action: UIAction) in closure() + self.addAction(UIAction { _ in closure() self.clickedAnimation(vibrate: vibrate) }, for: controlEvents) } else { @@ -50,7 +50,7 @@ extension UIButton { func clickedAnimation(vibrate: Bool) { if vibrate { makeVibrate(degree: .light) } UIView.animate(withDuration: 0.1, animations: { - self.transform = CGAffineTransform(scaleX: 0.95, y: 0.95) }, completion: { (finish: Bool) in + self.transform = CGAffineTransform(scaleX: 0.95, y: 0.95) }, completion: { _ in UIView.animate(withDuration: 0.1, animations: { self.transform = CGAffineTransform.identity }) diff --git a/README.md b/README.md index b5e8818a..9a4d6c7a 100644 --- a/README.md +++ b/README.md @@ -1 +1,13 @@ -# Health-Food-Me-iOS \ No newline at end of file +![리드미1](https://user-images.githubusercontent.com/60260284/178661836-2da19f90-4487-4fbd-b9fa-6985c8fd770c.png) +--- +![리드미2](https://user-images.githubusercontent.com/60260284/178661872-dac681ae-7df5-4399-a9be-736400884aea.png) +![리드미3](https://user-images.githubusercontent.com/60260284/178663112-c7329a39-4312-438f-9654-9312ee3ee8b6.png) +--- +![리드미4](https://user-images.githubusercontent.com/60260284/178661877-18b25572-93f2-4608-8398-347e561a2333.png) +![리드미5](https://user-images.githubusercontent.com/60260284/178661879-0831aa2a-2dea-43f4-84f0-5158acac9f9e.png) +--- +![리드미6](https://user-images.githubusercontent.com/60260284/178661884-0bea9947-764c-448c-81d2-04018b3a8333.png) +![리드미7](https://user-images.githubusercontent.com/60260284/178661888-edaceef0-06f5-4606-b2b4-bfc64d4de3b0.png) +--- +![리드미8](https://user-images.githubusercontent.com/60260284/178661895-61fc5089-8631-4c3b-93a2-8021d6dff2fb.png) +![리드미9](https://user-images.githubusercontent.com/60260284/178661900-121cd817-dc9f-4d99-a6d0-89ba42f6ca44.png)