From 1336228a57ce3d2825aeafef7a4483df5d452db7 Mon Sep 17 00:00:00 2001 From: Hongsoojeong Date: Wed, 1 Feb 2023 13:42:55 +0900 Subject: [PATCH 1/2] first commit --- LGHTSG/LGHTSG.xcodeproj/project.pbxproj | 158 ++++- .../xcshareddata/xcschemes/LGHTSG.xcscheme | 85 +++ .../LGHTSG/Assets.xcassets/box/Contents.json | 6 + .../Assets.xcassets/box/check/Contents.json | 6 + .../check/check-box.imageset/Contents.json | 23 + .../check/check-box.imageset/pngegg_1x.png | Bin 0 -> 23123 bytes .../check/check-box.imageset/pngegg_2x.png | Bin 0 -> 23123 bytes .../check/check-box.imageset/pngegg_3x.png | Bin 0 -> 23123 bytes .../not-check-box.imageset/Contents.json | 23 + .../checkbox-unchecked-gray-th_1x.png | Bin 0 -> 1367 bytes .../checkbox-unchecked-gray-th_2x.png | Bin 0 -> 1367 bytes .../checkbox-unchecked-gray-th_3x.png | Bin 0 -> 1367 bytes .../Contents.json" | 23 + .../Group 157_1x.png" | Bin 0 -> 1639 bytes .../Group 157_2x.png" | Bin 0 -> 3332 bytes .../Group 157_3x.png" | Bin 0 -> 4828 bytes .../Contents.json" | 23 + .../Group 158_1x.png" | Bin 0 -> 1777 bytes .../Group 158_2x.png" | Bin 0 -> 3562 bytes .../Group 158_3x.png" | Bin 0 -> 5120 bytes .../Contents.json" | 23 + .../Group 156_1x.png" | Bin 0 -> 1530 bytes .../Group 156_2x.png" | Bin 0 -> 3017 bytes .../Group 156_3x.png" | Bin 0 -> 4726 bytes .../confirm-code-btn.imageset/Contents.json | 23 + .../Group 143_1x.png | Bin 0 -> 1123 bytes .../Group 143_2x.png | Bin 0 -> 2292 bytes .../Group 143_3x.png | Bin 0 -> 3487 bytes .../box/send-code-btn.imageset/Contents.json | 23 + .../send-code-btn.imageset/Group 142_1x.png | Bin 0 -> 1153 bytes .../send-code-btn.imageset/Group 142_2x.png | Bin 0 -> 2376 bytes .../send-code-btn.imageset/Group 142_3x.png | Bin 0 -> 3689 bytes .../box/text-box.imageset/Contents.json | 23 + .../box/text-box.imageset/Rectangle 11_1x.png | Bin 0 -> 5675 bytes .../box/text-box.imageset/Rectangle 11_2x.png | Bin 0 -> 17872 bytes .../box/text-box.imageset/Rectangle 11_3x.png | Bin 0 -> 34933 bytes .../box/text-field.imageset/Contents.json | 23 + .../text-field.imageset/Rectangle 172_1x.png | Bin 0 -> 424 bytes .../text-field.imageset/Rectangle 172_2x.png | Bin 0 -> 911 bytes .../text-field.imageset/Rectangle 172_3x.png | Bin 0 -> 1515 bytes .../box/text-long-box.imageset/Contents.json | 23 + .../Rectangle 12_1x.png | Bin 0 -> 2412 bytes .../Rectangle 12_2x.png | Bin 0 -> 6543 bytes .../Rectangle 12_3x.png | Bin 0 -> 12207 bytes .../LGHTSG/Assets.xcassets/btn/Contents.json | 6 + .../btn/agree-btn.imageset/Btn_1x.png | Bin 0 -> 1434 bytes .../btn/agree-btn.imageset/Btn_2x.png | Bin 0 -> 2599 bytes .../btn/agree-btn.imageset/Btn_3x.png | Bin 0 -> 3976 bytes .../btn/agree-btn.imageset/Contents.json | 23 + .../btn/highlight-btn.imageset/Contents.json | 23 + .../highlight-btn.imageset/Rectangle_1x.png | Bin 0 -> 376 bytes .../highlight-btn.imageset/Rectangle_2x.png | Bin 0 -> 818 bytes .../highlight-btn.imageset/Rectangle_3x.png | Bin 0 -> 1364 bytes .../btn/next-btn.imageset/Contents.json | 23 + .../\355\225\230\353\213\250 Btn_1x.png" | Bin 0 -> 1206 bytes .../\355\225\230\353\213\250 Btn_2x.png" | Bin 0 -> 2145 bytes .../\355\225\230\353\213\250 Btn_3x.png" | Bin 0 -> 3152 bytes .../btn/success-btn.imageset/Contents.json | 23 + .../success-btn.imageset/Rectangle 25_1x.png | Bin 0 -> 412 bytes .../success-btn.imageset/Rectangle 25_2x.png | Bin 0 -> 891 bytes .../success-btn.imageset/Rectangle 25_3x.png | Bin 0 -> 1491 bytes .../Assets.xcassets/iconImage/Contents.json | 6 + .../iconImage/icon.imageset/Contents.json | 23 + ...\225\214 \354\202\264\352\261\270 (4).png" | Bin 0 -> 1754 bytes ...\225\214 \354\202\264\352\261\270 (5).png" | Bin 0 -> 3466 bytes ...\225\214 \354\202\264\352\261\270 (6).png" | Bin 0 -> 5247 bytes .../icon_vertical.imageset/Contents.json | 23 + ...3\225\214 \354\202\264\352\261\270_1x.png" | Bin 0 -> 1735 bytes ...3\225\214 \354\202\264\352\261\270_2x.png" | Bin 0 -> 3533 bytes ...3\225\214 \354\202\264\352\261\270_3x.png" | Bin 0 -> 5351 bytes .../iconImage/profile.imageset/Contents.json | 23 + .../profile.imageset/Group 105_1x.png | Bin 0 -> 2401 bytes .../profile.imageset/Group 105_2x.png | Bin 0 -> 4623 bytes .../profile.imageset/Group 105_3x.png | Bin 0 -> 6803 bytes .../LGHTSG/Assets.xcassets/line/Contents.json | 6 + .../line/line.imageset/Contents.json | 23 + .../line/line.imageset/Line 25_1x.png | Bin 0 -> 131 bytes .../line/line.imageset/Line 25_2x.png | Bin 0 -> 139 bytes .../line/line.imageset/Line 25_3x.png | Bin 0 -> 150 bytes .../Assets.xcassets/login/Contents.json | 6 + .../login/kakaoLogin.imageset/Contents.json | 23 + .../kakao_login_large_wide_1x.png | Bin 0 -> 2843 bytes .../kakao_login_large_wide_2x.png | Bin 0 -> 6496 bytes .../kakao_login_large_wide_3x.png | Bin 0 -> 10924 bytes .../login/login-btn.imageset/Contents.json | 23 + .../login/login-btn.imageset/Group 130_1x.png | Bin 0 -> 961 bytes .../login/login-btn.imageset/Group 130_2x.png | Bin 0 -> 1808 bytes .../login/login-btn.imageset/Group 130_3x.png | Bin 0 -> 2676 bytes .../login/login-btn2.imageset/Contents.json | 23 + ...41\234\352\267\270\354\235\270 Btn_1x.png" | Bin 0 -> 995 bytes ...41\234\352\267\270\354\235\270 Btn_2x.png" | Bin 0 -> 1809 bytes ...41\234\352\267\270\354\235\270 Btn_3x.png" | Bin 0 -> 2797 bytes .../login/login-line.imageset/Contents.json | 23 + ...\234\352\267\270\354\235\270 Line _1x.png" | Bin 0 -> 764 bytes ...\234\352\267\270\354\235\270 Line _2x.png" | Bin 0 -> 1432 bytes ...\234\352\267\270\354\235\270 Line _3x.png" | Bin 0 -> 2026 bytes .../Assets.xcassets/navigation/Contents.json | 6 + .../back-arrow.imageset/Contents.json | 23 + .../back-arrow.imageset/Vector_1x.png | Bin 0 -> 171 bytes .../back-arrow.imageset/Vector_2x.png | Bin 0 -> 201 bytes .../back-arrow.imageset/Vector_3x.png | Bin 0 -> 240 bytes .../Authentication/LoginController.swift | 70 ++- .../RegisterationController.swift | 153 ++++- .../RegisterationSuccessController.swift | 27 + .../CheckAgreeController.swift | 104 ++++ .../CheckPageMarketingController.swift | 52 ++ .../CheckPagePrivacyController.swift | 53 ++ .../CheckPageServiceController.swift | 54 ++ .../Controller/FindPassWordController.swift | 56 ++ .../LGHTSG/Controller/MyPageController.swift | 49 ++ LGHTSG/LGHTSG/Controller/ViewController.swift | 55 ++ LGHTSG/LGHTSG/Info.plist | 10 + LGHTSG/LGHTSG/Model/Login.swift | 20 + LGHTSG/LGHTSG/Model/LoginModel.swift | 72 +++ LGHTSG/LGHTSG/Model/LoginResultModel.swift | 16 + LGHTSG/LGHTSG/Model/changePw.swift | 17 + LGHTSG/LGHTSG/Model/email.swift | 17 + LGHTSG/LGHTSG/Model/emailCheckModel.swift | 76 +++ LGHTSG/LGHTSG/Model/join.swift | 22 + LGHTSG/LGHTSG/Model/user.swift | 22 + LGHTSG/LGHTSG/View/FindPwView.swift | 575 ++++++++++++++++++ LGHTSG/LGHTSG/View/LoginView.swift | 271 +++++++++ ...353\263\265\354\202\254\353\263\270.swift" | 22 + LGHTSG/LGHTSG/View/MyPageView.swift | 32 + LGHTSG/LGHTSG/View/StartView.swift | 145 +++++ .../CheckView/CheckAgreeView.swift | 441 ++++++++++++++ .../CheckView/CheckPageMarketingView.swift | 97 +++ .../CheckView/CheckPagePrivacyView.swift | 121 ++++ .../CheckView/CheckPageServiceView.swift | 101 +++ .../with RegisterView/JoinSuccessView.swift | 98 +++ .../View/with RegisterView/RegisterView.swift | 530 ++++++++++++++++ LGHTSG/LGHTSG/ViewController.swift | 20 - .../LGHTSG/ViewModel/ChangePwApiModel.swift | 40 ++ LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift | 36 ++ .../ViewModel/LoginApiHeaderModel.swift | 41 ++ LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift | 37 ++ LGHTSG/LGHTSG/ViewModel/emailApiModel.swift | 36 ++ 137 files changed, 4377 insertions(+), 25 deletions(-) create mode 100644 LGHTSG/LGHTSG.xcodeproj/xcshareddata/xcschemes/LGHTSG.xcscheme create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_3x.png create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Contents.json" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Group 157_1x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Group 157_2x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Group 157_3x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\353\247\210\354\274\200\355\214\205 \354\240\225\353\263\264.imageset/Contents.json" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\353\247\210\354\274\200\355\214\205 \354\240\225\353\263\264.imageset/Group 158_1x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\353\247\210\354\274\200\355\214\205 \354\240\225\353\263\264.imageset/Group 158_2x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\353\247\210\354\274\200\355\214\205 \354\240\225\353\263\264.imageset/Group 158_3x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\354\204\234\353\271\204\354\212\244 \354\235\264\354\232\251\354\225\275\352\264\200.imageset/Contents.json" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\354\204\234\353\271\204\354\212\244 \354\235\264\354\232\251\354\225\275\352\264\200.imageset/Group 156_1x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\354\204\234\353\271\204\354\212\244 \354\235\264\354\232\251\354\225\275\352\264\200.imageset/Group 156_2x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/box/check/\354\204\234\353\271\204\354\212\244 \354\235\264\354\232\251\354\225\275\352\264\200.imageset/Group 156_3x.png" create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/confirm-code-btn.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/confirm-code-btn.imageset/Group 143_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/confirm-code-btn.imageset/Group 143_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/confirm-code-btn.imageset/Group 143_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/send-code-btn.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/send-code-btn.imageset/Group 142_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/send-code-btn.imageset/Group 142_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/send-code-btn.imageset/Group 142_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Rectangle 172_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Rectangle 172_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Rectangle 172_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/agree-btn.imageset/Btn_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/agree-btn.imageset/Btn_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/agree-btn.imageset/Btn_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/agree-btn.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/highlight-btn.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/highlight-btn.imageset/Rectangle_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/highlight-btn.imageset/Rectangle_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/highlight-btn.imageset/Rectangle_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/Contents.json create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_1x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_2x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_3x.png" create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/success-btn.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/success-btn.imageset/Rectangle 25_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/success-btn.imageset/Rectangle 25_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/success-btn.imageset/Rectangle 25_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/iconImage/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/Contents.json create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (4).png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (5).png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (6).png" create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/Contents.json create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270_1x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270_2x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270_3x.png" create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/iconImage/profile.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/iconImage/profile.imageset/Group 105_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/iconImage/profile.imageset/Group 105_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/iconImage/profile.imageset/Group 105_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/line/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Line 25_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Line 25_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Line 25_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/login-btn.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/login-btn.imageset/Group 130_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/login-btn.imageset/Group 130_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/login-btn.imageset/Group 130_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/login-btn2.imageset/Contents.json create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/login/login-btn2.imageset/\353\241\234\352\267\270\354\235\270 Btn_1x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/login/login-btn2.imageset/\353\241\234\352\267\270\354\235\270 Btn_2x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/login/login-btn2.imageset/\353\241\234\352\267\270\354\235\270 Btn_3x.png" create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/login/login-line.imageset/Contents.json create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/login/login-line.imageset/\352\260\204\355\216\270 \353\241\234\352\267\270\354\235\270 Line _1x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/login/login-line.imageset/\352\260\204\355\216\270 \353\241\234\352\267\270\354\235\270 Line _2x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/login/login-line.imageset/\352\260\204\355\216\270 \353\241\234\352\267\270\354\235\270 Line _3x.png" create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/navigation/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/navigation/back-arrow.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/navigation/back-arrow.imageset/Vector_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/navigation/back-arrow.imageset/Vector_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/navigation/back-arrow.imageset/Vector_3x.png create mode 100644 LGHTSG/LGHTSG/Controller/Authentication/RegisterationSuccessController.swift create mode 100644 LGHTSG/LGHTSG/Controller/CheckController/CheckAgreeController.swift create mode 100644 LGHTSG/LGHTSG/Controller/CheckController/CheckPageMarketingController.swift create mode 100644 LGHTSG/LGHTSG/Controller/CheckController/CheckPagePrivacyController.swift create mode 100644 LGHTSG/LGHTSG/Controller/CheckController/CheckPageServiceController.swift create mode 100644 LGHTSG/LGHTSG/Controller/FindPassWordController.swift create mode 100644 LGHTSG/LGHTSG/Controller/MyPageController.swift create mode 100644 LGHTSG/LGHTSG/Controller/ViewController.swift create mode 100644 LGHTSG/LGHTSG/Model/Login.swift create mode 100644 LGHTSG/LGHTSG/Model/LoginModel.swift create mode 100644 LGHTSG/LGHTSG/Model/LoginResultModel.swift create mode 100644 LGHTSG/LGHTSG/Model/changePw.swift create mode 100644 LGHTSG/LGHTSG/Model/email.swift create mode 100644 LGHTSG/LGHTSG/Model/emailCheckModel.swift create mode 100644 LGHTSG/LGHTSG/Model/join.swift create mode 100644 LGHTSG/LGHTSG/Model/user.swift create mode 100644 LGHTSG/LGHTSG/View/FindPwView.swift create mode 100644 LGHTSG/LGHTSG/View/LoginView.swift create mode 100644 "LGHTSG/LGHTSG/View/MyPageView \353\263\265\354\202\254\353\263\270.swift" create mode 100644 LGHTSG/LGHTSG/View/MyPageView.swift create mode 100644 LGHTSG/LGHTSG/View/StartView.swift create mode 100644 LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckAgreeView.swift create mode 100644 LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPageMarketingView.swift create mode 100644 LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPagePrivacyView.swift create mode 100644 LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPageServiceView.swift create mode 100644 LGHTSG/LGHTSG/View/with RegisterView/JoinSuccessView.swift create mode 100644 LGHTSG/LGHTSG/View/with RegisterView/RegisterView.swift delete mode 100644 LGHTSG/LGHTSG/ViewController.swift create mode 100644 LGHTSG/LGHTSG/ViewModel/ChangePwApiModel.swift create mode 100644 LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift create mode 100644 LGHTSG/LGHTSG/ViewModel/LoginApiHeaderModel.swift create mode 100644 LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift create mode 100644 LGHTSG/LGHTSG/ViewModel/emailApiModel.swift diff --git a/LGHTSG/LGHTSG.xcodeproj/project.pbxproj b/LGHTSG/LGHTSG.xcodeproj/project.pbxproj index 6f29040..df1295f 100644 --- a/LGHTSG/LGHTSG.xcodeproj/project.pbxproj +++ b/LGHTSG/LGHTSG.xcodeproj/project.pbxproj @@ -19,6 +19,38 @@ 07557561296BFC5900B8AF77 /* MainTabController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07557560296BFC5900B8AF77 /* MainTabController.swift */; }; 07557563296BFCD300B8AF77 /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07557562296BFCD300B8AF77 /* Cell.swift */; }; 8E910354CAD5238FB38C267D /* Pods_LGHTSG.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A81FE00F91FA41642246A20 /* Pods_LGHTSG.framework */; }; + F51D92FE29803EB300DFC7E4 /* LoginModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51D92FD29803EB300DFC7E4 /* LoginModel.swift */; }; + F51D930029803EE700DFC7E4 /* emailCheckModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51D92FF29803EE700DFC7E4 /* emailCheckModel.swift */; }; + F51D930229803F3D00DFC7E4 /* NanumSquareR.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F51D930129803F3D00DFC7E4 /* NanumSquareR.ttf */; }; + F51D930429803F4500DFC7E4 /* NanumSquareB.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F51D930329803F4500DFC7E4 /* NanumSquareB.ttf */; }; + F51D930629803FBA00DFC7E4 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51D930529803FBA00DFC7E4 /* LoginView.swift */; }; + F51D9308298042E500DFC7E4 /* Login.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51D9307298042E500DFC7E4 /* Login.swift */; }; + F526375929894532001CCCBE /* changePw.swift in Sources */ = {isa = PBXBuildFile; fileRef = F526375829894532001CCCBE /* changePw.swift */; }; + F526375B298945D2001CCCBE /* ChangePwApiModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F526375A298945D2001CCCBE /* ChangePwApiModel.swift */; }; + F5828A4929821B9900C870B3 /* LoginApiModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5828A4829821B9900C870B3 /* LoginApiModel.swift */; }; + F5828A4B2982B5F100C870B3 /* LoginApiHeaderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5828A4A2982B5F100C870B3 /* LoginApiHeaderModel.swift */; }; + F5828A532982BC7500C870B3 /* MyPageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5828A522982BC7500C870B3 /* MyPageController.swift */; }; + F5828A552982BCCB00C870B3 /* MyPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5828A542982BCCB00C870B3 /* MyPageView.swift */; }; + F5828A572982BDA600C870B3 /* FindPasswordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5828A562982BDA600C870B3 /* FindPasswordController.swift */; }; + F5828A592982C15A00C870B3 /* LoginResultModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5828A582982C15A00C870B3 /* LoginResultModel.swift */; }; + F5828A5B2983B2D300C870B3 /* email.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5828A5A2983B2D300C870B3 /* email.swift */; }; + F5828A5D2983B34500C870B3 /* emailApiModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5828A5C2983B34500C870B3 /* emailApiModel.swift */; }; + F588D50F2980FDDF00D4E588 /* StartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D50E2980FDDF00D4E588 /* StartView.swift */; }; + F588D5112981096A00D4E588 /* FindPwView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D5102981096A00D4E588 /* FindPwView.swift */; }; + F588D515298122A100D4E588 /* RegisterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D514298122A100D4E588 /* RegisterView.swift */; }; + F588D517298149AE00D4E588 /* CheckAgreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D516298149AD00D4E588 /* CheckAgreeView.swift */; }; + F588D51929814A5400D4E588 /* CheckAgreeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D51829814A5400D4E588 /* CheckAgreeController.swift */; }; + F588D51B2981604500D4E588 /* CheckPageServiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D51A2981604500D4E588 /* CheckPageServiceView.swift */; }; + F588D51D2981605D00D4E588 /* CheckPagePrivacyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D51C2981605D00D4E588 /* CheckPagePrivacyView.swift */; }; + F588D51F2981607400D4E588 /* CheckPageMarketingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D51E2981607400D4E588 /* CheckPageMarketingView.swift */; }; + F588D5212981614100D4E588 /* CheckPageServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D5202981614100D4E588 /* CheckPageServiceController.swift */; }; + F588D5232981615A00D4E588 /* CheckPagePrivacyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D5222981615A00D4E588 /* CheckPagePrivacyController.swift */; }; + F588D5252981616D00D4E588 /* CheckPageMarketingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F588D5242981616D00D4E588 /* CheckPageMarketingController.swift */; }; + F59B5F952984F98A007F13CA /* join.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59B5F942984F98A007F13CA /* join.swift */; }; + F59B5F972984F9B5007F13CA /* JoinApiModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59B5F962984F9B5007F13CA /* JoinApiModel.swift */; }; + F59B5F992985453D007F13CA /* JoinSuccessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59B5F982985453D007F13CA /* JoinSuccessView.swift */; }; + F59B5F9C29854741007F13CA /* RegisterationSuccessController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59B5F9B29854741007F13CA /* RegisterationSuccessController.swift */; }; + F59B5F9E29854B89007F13CA /* user.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59B5F9D29854B89007F13CA /* user.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -36,6 +68,38 @@ 1A81FE00F91FA41642246A20 /* Pods_LGHTSG.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LGHTSG.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6F7EA128F8EC33ED812CADCA /* Pods-LGHTSG.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LGHTSG.release.xcconfig"; path = "Target Support Files/Pods-LGHTSG/Pods-LGHTSG.release.xcconfig"; sourceTree = ""; }; 9154F7534146417B8EBDBECC /* Pods-LGHTSG.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LGHTSG.debug.xcconfig"; path = "Target Support Files/Pods-LGHTSG/Pods-LGHTSG.debug.xcconfig"; sourceTree = ""; }; + F51D92FD29803EB300DFC7E4 /* LoginModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginModel.swift; sourceTree = ""; }; + F51D92FF29803EE700DFC7E4 /* emailCheckModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = emailCheckModel.swift; sourceTree = ""; }; + F51D930129803F3D00DFC7E4 /* NanumSquareR.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = NanumSquareR.ttf; path = ../../../../../Downloads/NaverNanumSquare/NanumFontSetup_TTF_SQUARE/NanumSquareR.ttf; sourceTree = ""; }; + F51D930329803F4500DFC7E4 /* NanumSquareB.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = NanumSquareB.ttf; path = ../../../../../Downloads/NaverNanumSquare/NanumFontSetup_TTF_SQUARE/NanumSquareB.ttf; sourceTree = ""; }; + F51D930529803FBA00DFC7E4 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; + F51D9307298042E500DFC7E4 /* Login.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Login.swift; sourceTree = ""; }; + F526375829894532001CCCBE /* changePw.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = changePw.swift; sourceTree = ""; }; + F526375A298945D2001CCCBE /* ChangePwApiModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangePwApiModel.swift; sourceTree = ""; }; + F5828A4829821B9900C870B3 /* LoginApiModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginApiModel.swift; sourceTree = ""; }; + F5828A4A2982B5F100C870B3 /* LoginApiHeaderModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginApiHeaderModel.swift; sourceTree = ""; }; + F5828A522982BC7500C870B3 /* MyPageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageController.swift; sourceTree = ""; }; + F5828A542982BCCB00C870B3 /* MyPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageView.swift; sourceTree = ""; }; + F5828A562982BDA600C870B3 /* FindPasswordController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindPasswordController.swift; sourceTree = ""; }; + F5828A582982C15A00C870B3 /* LoginResultModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginResultModel.swift; sourceTree = ""; }; + F5828A5A2983B2D300C870B3 /* email.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = email.swift; sourceTree = ""; }; + F5828A5C2983B34500C870B3 /* emailApiModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = emailApiModel.swift; sourceTree = ""; }; + F588D50E2980FDDF00D4E588 /* StartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartView.swift; sourceTree = ""; }; + F588D5102981096A00D4E588 /* FindPwView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindPwView.swift; sourceTree = ""; }; + F588D514298122A100D4E588 /* RegisterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterView.swift; sourceTree = ""; }; + F588D516298149AD00D4E588 /* CheckAgreeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckAgreeView.swift; sourceTree = ""; }; + F588D51829814A5400D4E588 /* CheckAgreeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckAgreeController.swift; sourceTree = ""; }; + F588D51A2981604500D4E588 /* CheckPageServiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPageServiceView.swift; sourceTree = ""; }; + F588D51C2981605D00D4E588 /* CheckPagePrivacyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPagePrivacyView.swift; sourceTree = ""; }; + F588D51E2981607400D4E588 /* CheckPageMarketingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPageMarketingView.swift; sourceTree = ""; }; + F588D5202981614100D4E588 /* CheckPageServiceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPageServiceController.swift; sourceTree = ""; }; + F588D5222981615A00D4E588 /* CheckPagePrivacyController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPagePrivacyController.swift; sourceTree = ""; }; + F588D5242981616D00D4E588 /* CheckPageMarketingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPageMarketingController.swift; sourceTree = ""; }; + F59B5F942984F98A007F13CA /* join.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = join.swift; sourceTree = ""; }; + F59B5F962984F9B5007F13CA /* JoinApiModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinApiModel.swift; sourceTree = ""; }; + F59B5F982985453D007F13CA /* JoinSuccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinSuccessView.swift; sourceTree = ""; }; + F59B5F9B29854741007F13CA /* RegisterationSuccessController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterationSuccessController.swift; sourceTree = ""; }; + F59B5F9D29854B89007F13CA /* user.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = user.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -79,7 +143,6 @@ 071E055A296BB88B0020282F /* Controller */, 071E0557296BB83F0020282F /* Network */, 071E0555296BB82F0020282F /* App */, - 071E0544296BB7B50020282F /* ViewController.swift */, 071E0549296BB7B70020282F /* Assets.xcassets */, 071E054B296BB7B70020282F /* LaunchScreen.storyboard */, 071E054E296BB7B70020282F /* Info.plist */, @@ -91,6 +154,14 @@ 071E0554296BB8210020282F /* Model */ = { isa = PBXGroup; children = ( + F51D92FF29803EE700DFC7E4 /* emailCheckModel.swift */, + F51D92FD29803EB300DFC7E4 /* LoginModel.swift */, + F5828A582982C15A00C870B3 /* LoginResultModel.swift */, + F51D9307298042E500DFC7E4 /* Login.swift */, + F5828A5A2983B2D300C870B3 /* email.swift */, + F59B5F942984F98A007F13CA /* join.swift */, + F59B5F9D29854B89007F13CA /* user.swift */, + F526375829894532001CCCBE /* changePw.swift */, ); path = Model; sourceTree = ""; @@ -107,6 +178,11 @@ 071E0556296BB8380020282F /* ViewModel */ = { isa = PBXGroup; children = ( + F5828A4829821B9900C870B3 /* LoginApiModel.swift */, + F5828A4A2982B5F100C870B3 /* LoginApiHeaderModel.swift */, + F5828A5C2983B34500C870B3 /* emailApiModel.swift */, + F59B5F962984F9B5007F13CA /* JoinApiModel.swift */, + F526375A298945D2001CCCBE /* ChangePwApiModel.swift */, ); path = ViewModel; sourceTree = ""; @@ -121,7 +197,12 @@ 071E0558296BB8510020282F /* View */ = { isa = PBXGroup; children = ( + F59B5F9A2985454C007F13CA /* with RegisterView */, 07557562296BFCD300B8AF77 /* Cell.swift */, + F51D930529803FBA00DFC7E4 /* LoginView.swift */, + F588D50E2980FDDF00D4E588 /* StartView.swift */, + F588D5102981096A00D4E588 /* FindPwView.swift */, + F5828A542982BCCB00C870B3 /* MyPageView.swift */, ); path = View; sourceTree = ""; @@ -129,6 +210,8 @@ 071E0559296BB86E0020282F /* Font */ = { isa = PBXGroup; children = ( + F51D930129803F3D00DFC7E4 /* NanumSquareR.ttf */, + F51D930329803F4500DFC7E4 /* NanumSquareB.ttf */, ); path = Font; sourceTree = ""; @@ -138,6 +221,10 @@ children = ( 0755755A296BFC2100B8AF77 /* Authentication */, 07557560296BFC5900B8AF77 /* MainTabController.swift */, + F5828A522982BC7500C870B3 /* MyPageController.swift */, + 071E0544296BB7B50020282F /* ViewController.swift */, + F5828A562982BDA600C870B3 /* FindPasswordController.swift */, + F5828A4D2982BBBE00C870B3 /* CheckController */, ); path = Controller; sourceTree = ""; @@ -147,6 +234,7 @@ children = ( 0755755B296BFC3300B8AF77 /* LoginController.swift */, 0755755E296BFC4B00B8AF77 /* RegisterationController.swift */, + F59B5F9B29854741007F13CA /* RegisterationSuccessController.swift */, ); path = Authentication; sourceTree = ""; @@ -168,6 +256,38 @@ name = Frameworks; sourceTree = ""; }; + F5828A4C2982BBA700C870B3 /* CheckView */ = { + isa = PBXGroup; + children = ( + F588D516298149AD00D4E588 /* CheckAgreeView.swift */, + F588D51A2981604500D4E588 /* CheckPageServiceView.swift */, + F588D51C2981605D00D4E588 /* CheckPagePrivacyView.swift */, + F588D51E2981607400D4E588 /* CheckPageMarketingView.swift */, + ); + path = CheckView; + sourceTree = ""; + }; + F5828A4D2982BBBE00C870B3 /* CheckController */ = { + isa = PBXGroup; + children = ( + F588D51829814A5400D4E588 /* CheckAgreeController.swift */, + F588D5202981614100D4E588 /* CheckPageServiceController.swift */, + F588D5222981615A00D4E588 /* CheckPagePrivacyController.swift */, + F588D5242981616D00D4E588 /* CheckPageMarketingController.swift */, + ); + path = CheckController; + sourceTree = ""; + }; + F59B5F9A2985454C007F13CA /* with RegisterView */ = { + isa = PBXGroup; + children = ( + F588D514298122A100D4E588 /* RegisterView.swift */, + F59B5F982985453D007F13CA /* JoinSuccessView.swift */, + F5828A4C2982BBA700C870B3 /* CheckView */, + ); + path = "with RegisterView"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -237,6 +357,8 @@ buildActionMask = 2147483647; files = ( 071E054D296BB7B70020282F /* LaunchScreen.storyboard in Resources */, + F51D930229803F3D00DFC7E4 /* NanumSquareR.ttf in Resources */, + F51D930429803F4500DFC7E4 /* NanumSquareB.ttf in Resources */, 071E054A296BB7B70020282F /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -291,12 +413,42 @@ buildActionMask = 2147483647; files = ( 071E0545296BB7B50020282F /* ViewController.swift in Sources */, + F51D930029803EE700DFC7E4 /* emailCheckModel.swift in Sources */, 0755755C296BFC3300B8AF77 /* LoginController.swift in Sources */, 07557563296BFCD300B8AF77 /* Cell.swift in Sources */, + F588D5212981614100D4E588 /* CheckPageServiceController.swift in Sources */, + F588D51B2981604500D4E588 /* CheckPageServiceView.swift in Sources */, + F526375929894532001CCCBE /* changePw.swift in Sources */, + F5828A592982C15A00C870B3 /* LoginResultModel.swift in Sources */, + F588D5252981616D00D4E588 /* CheckPageMarketingController.swift in Sources */, + F59B5F972984F9B5007F13CA /* JoinApiModel.swift in Sources */, 07557561296BFC5900B8AF77 /* MainTabController.swift in Sources */, + F59B5F952984F98A007F13CA /* join.swift in Sources */, + F588D50F2980FDDF00D4E588 /* StartView.swift in Sources */, + F59B5F992985453D007F13CA /* JoinSuccessView.swift in Sources */, + F588D5112981096A00D4E588 /* FindPwView.swift in Sources */, + F5828A4929821B9900C870B3 /* LoginApiModel.swift in Sources */, + F51D92FE29803EB300DFC7E4 /* LoginModel.swift in Sources */, + F588D517298149AE00D4E588 /* CheckAgreeView.swift in Sources */, + F588D51F2981607400D4E588 /* CheckPageMarketingView.swift in Sources */, + F5828A5B2983B2D300C870B3 /* email.swift in Sources */, + F51D9308298042E500DFC7E4 /* Login.swift in Sources */, + F59B5F9C29854741007F13CA /* RegisterationSuccessController.swift in Sources */, + F5828A552982BCCB00C870B3 /* MyPageView.swift in Sources */, + F588D51D2981605D00D4E588 /* CheckPagePrivacyView.swift in Sources */, 071E0541296BB7B50020282F /* AppDelegate.swift in Sources */, + F51D930629803FBA00DFC7E4 /* LoginView.swift in Sources */, + F59B5F9E29854B89007F13CA /* user.swift in Sources */, + F526375B298945D2001CCCBE /* ChangePwApiModel.swift in Sources */, + F588D515298122A100D4E588 /* RegisterView.swift in Sources */, + F5828A572982BDA600C870B3 /* FindPasswordController.swift in Sources */, + F588D51929814A5400D4E588 /* CheckAgreeController.swift in Sources */, 071E0543296BB7B50020282F /* SceneDelegate.swift in Sources */, + F5828A5D2983B34500C870B3 /* emailApiModel.swift in Sources */, + F588D5232981615A00D4E588 /* CheckPagePrivacyController.swift in Sources */, 0755755F296BFC4B00B8AF77 /* RegisterationController.swift in Sources */, + F5828A532982BC7500C870B3 /* MyPageController.swift in Sources */, + F5828A4B2982B5F100C870B3 /* LoginApiHeaderModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -436,7 +588,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 2V279GTPCN; + DEVELOPMENT_TEAM = 9KQS6UJ9YX; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = LGHTSG/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -465,7 +617,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 2V279GTPCN; + DEVELOPMENT_TEAM = 9KQS6UJ9YX; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = LGHTSG/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; diff --git a/LGHTSG/LGHTSG.xcodeproj/xcshareddata/xcschemes/LGHTSG.xcscheme b/LGHTSG/LGHTSG.xcodeproj/xcshareddata/xcschemes/LGHTSG.xcscheme new file mode 100644 index 0000000..abb200a --- /dev/null +++ b/LGHTSG/LGHTSG.xcodeproj/xcshareddata/xcschemes/LGHTSG.xcscheme @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/box/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/box/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/box/check/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/box/check/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/Contents.json new file mode 100644 index 0000000..d72e32c --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "pngegg_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "pngegg_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "pngegg_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_1x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f252c927f95aa795200dfb538bf7a1dac36eee40 GIT binary patch literal 23123 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f252c927f95aa795200dfb538bf7a1dac36eee40 GIT binary patch literal 23123 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/check/check-box.imageset/pngegg_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f252c927f95aa795200dfb538bf7a1dac36eee40 GIT binary patch literal 23123 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/Contents.json new file mode 100644 index 0000000..fb2dad7 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "checkbox-unchecked-gray-th_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "checkbox-unchecked-gray-th_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "checkbox-unchecked-gray-th_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_1x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f6018f5a8527e3e4f666754013f2806168b73 GIT binary patch literal 1367 zcmeAS@N?(olHy`uVBq!ia0vp^DIm4nJ z@B`WW`x)nNFj@{0EGuwK2hw1@4DD)h&lnh3;yqm)Ln>~)os*w2HB{!f{rR1{w%t~V zvd}GWot5z92DfA%?_`H1;eQJwg+A*AHZ6(jX^L~%tHITjkm8!Cv17UAoAYnZuNKhs zHCx9M-y_Mf?m%p?x@2-$`R%XoULKuSJ^SAM;^{}f{dxDa<{nSobD1A??~2bAA8);1 zID=hW>5enAbjFjocgtpZO*^ywRejN1lj}Q9tmi5260B2}o}bgKu0HU};Vu;i&7K3{V%(d}c3q~j6R2uJqwo7AQ( z7ic+dX}7ff^rgv~9Iu>O&hByKR(tb=$(ZMp+HtP)XMC0PbQVw6d&gy6C|I|A_FkWR zD~#NiOqYx}dHYD{oUWvlg34a+wr@^?;t8ViA9k!N7Hm0web0&3dcV_m@>`<5Z8Ck+ z@?WTZZN-~JoA8b^{|XgPSs(F!l=)=G{H(f+(=s2=GEC>VIlW@~?Jk|uMKgmTU(ZkM=H6?UtieucF(!mM=d7jKkRIOd`PzDXj^t_V3I&v z*yWTAQL}08`r(K8^om;J9-g-FTD{P5#=IvhmgP=W<|_!XQRi)|T3FMzaf36v(J{$| zQTZzbPo;ad&o!T5lHQutD;U4`@dQrm4Ian*!yT>!C{9_P5PoB(YuV42Tq`EjC(Piq zE(knQB2};X(?3EmmnvvR^op#5Cyr(=jACU!)Tdo^z(4%J7Dd%5*@3qXZodL_#;Jl( zjrF`4-4`8Hvs+(<9$pa;=dSZ+PvemY^$>SnWv88ex^?osS}_f}Nx`=}5*;j5`QGaA zTW>p2bgMP)qzH4H;yG^aS)J9V=5=f>x&|@%v*7K4{{cH=WMV! zIYZHV{|~Npi)Xv(YUw#B-+lDc%APvh09`+cwOTKC~*o`#PJO|^`F zm3(EA)I;@Z7kYkq=p<@wDRQB8Mw+~EoaELW(*iFS-rUl7ewDye+j-h6kJa@1SG0!Q z*{;4m==AX|t#jXry-4SOd}%KKTTYUT2C+iO!w?C*^`tkC*eqYLFB=aOy zPpa&R_tT1l-f>H1*4_CSdg`Ijl07~zYpWnJEH>2();oy2t)TLH@* z)e_f;l9a@fRIB8oR3OD*WMF8hYhb8rXc%H-U}a=vWn`{vU}|Mx;L)GPfubQdKP5A* z61N7+OZT<_HAsSN2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMhd8i!PC{xWt~$( F697NCOilm* literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f6018f5a8527e3e4f666754013f2806168b73 GIT binary patch literal 1367 zcmeAS@N?(olHy`uVBq!ia0vp^DIm4nJ z@B`WW`x)nNFj@{0EGuwK2hw1@4DD)h&lnh3;yqm)Ln>~)os*w2HB{!f{rR1{w%t~V zvd}GWot5z92DfA%?_`H1;eQJwg+A*AHZ6(jX^L~%tHITjkm8!Cv17UAoAYnZuNKhs zHCx9M-y_Mf?m%p?x@2-$`R%XoULKuSJ^SAM;^{}f{dxDa<{nSobD1A??~2bAA8);1 zID=hW>5enAbjFjocgtpZO*^ywRejN1lj}Q9tmi5260B2}o}bgKu0HU};Vu;i&7K3{V%(d}c3q~j6R2uJqwo7AQ( z7ic+dX}7ff^rgv~9Iu>O&hByKR(tb=$(ZMp+HtP)XMC0PbQVw6d&gy6C|I|A_FkWR zD~#NiOqYx}dHYD{oUWvlg34a+wr@^?;t8ViA9k!N7Hm0web0&3dcV_m@>`<5Z8Ck+ z@?WTZZN-~JoA8b^{|XgPSs(F!l=)=G{H(f+(=s2=GEC>VIlW@~?Jk|uMKgmTU(ZkM=H6?UtieucF(!mM=d7jKkRIOd`PzDXj^t_V3I&v z*yWTAQL}08`r(K8^om;J9-g-FTD{P5#=IvhmgP=W<|_!XQRi)|T3FMzaf36v(J{$| zQTZzbPo;ad&o!T5lHQutD;U4`@dQrm4Ian*!yT>!C{9_P5PoB(YuV42Tq`EjC(Piq zE(knQB2};X(?3EmmnvvR^op#5Cyr(=jACU!)Tdo^z(4%J7Dd%5*@3qXZodL_#;Jl( zjrF`4-4`8Hvs+(<9$pa;=dSZ+PvemY^$>SnWv88ex^?osS}_f}Nx`=}5*;j5`QGaA zTW>p2bgMP)qzH4H;yG^aS)J9V=5=f>x&|@%v*7K4{{cH=WMV! zIYZHV{|~Npi)Xv(YUw#B-+lDc%APvh09`+cwOTKC~*o`#PJO|^`F zm3(EA)I;@Z7kYkq=p<@wDRQB8Mw+~EoaELW(*iFS-rUl7ewDye+j-h6kJa@1SG0!Q z*{;4m==AX|t#jXry-4SOd}%KKTTYUT2C+iO!w?C*^`tkC*eqYLFB=aOy zPpa&R_tT1l-f>H1*4_CSdg`Ijl07~zYpWnJEH>2();oy2t)TLH@* z)e_f;l9a@fRIB8oR3OD*WMF8hYhb8rXc%H-U}a=vWn`{vU}|Mx;L)GPfubQdKP5A* z61N7+OZT<_HAsSN2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMhd8i!PC{xWt~$( F697NCOilm* literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/check/not-check-box.imageset/checkbox-unchecked-gray-th_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f6018f5a8527e3e4f666754013f2806168b73 GIT binary patch literal 1367 zcmeAS@N?(olHy`uVBq!ia0vp^DIm4nJ z@B`WW`x)nNFj@{0EGuwK2hw1@4DD)h&lnh3;yqm)Ln>~)os*w2HB{!f{rR1{w%t~V zvd}GWot5z92DfA%?_`H1;eQJwg+A*AHZ6(jX^L~%tHITjkm8!Cv17UAoAYnZuNKhs zHCx9M-y_Mf?m%p?x@2-$`R%XoULKuSJ^SAM;^{}f{dxDa<{nSobD1A??~2bAA8);1 zID=hW>5enAbjFjocgtpZO*^ywRejN1lj}Q9tmi5260B2}o}bgKu0HU};Vu;i&7K3{V%(d}c3q~j6R2uJqwo7AQ( z7ic+dX}7ff^rgv~9Iu>O&hByKR(tb=$(ZMp+HtP)XMC0PbQVw6d&gy6C|I|A_FkWR zD~#NiOqYx}dHYD{oUWvlg34a+wr@^?;t8ViA9k!N7Hm0web0&3dcV_m@>`<5Z8Ck+ z@?WTZZN-~JoA8b^{|XgPSs(F!l=)=G{H(f+(=s2=GEC>VIlW@~?Jk|uMKgmTU(ZkM=H6?UtieucF(!mM=d7jKkRIOd`PzDXj^t_V3I&v z*yWTAQL}08`r(K8^om;J9-g-FTD{P5#=IvhmgP=W<|_!XQRi)|T3FMzaf36v(J{$| zQTZzbPo;ad&o!T5lHQutD;U4`@dQrm4Ian*!yT>!C{9_P5PoB(YuV42Tq`EjC(Piq zE(knQB2};X(?3EmmnvvR^op#5Cyr(=jACU!)Tdo^z(4%J7Dd%5*@3qXZodL_#;Jl( zjrF`4-4`8Hvs+(<9$pa;=dSZ+PvemY^$>SnWv88ex^?osS}_f}Nx`=}5*;j5`QGaA zTW>p2bgMP)qzH4H;yG^aS)J9V=5=f>x&|@%v*7K4{{cH=WMV! zIYZHV{|~Npi)Xv(YUw#B-+lDc%APvh09`+cwOTKC~*o`#PJO|^`F zm3(EA)I;@Z7kYkq=p<@wDRQB8Mw+~EoaELW(*iFS-rUl7ewDye+j-h6kJa@1SG0!Q z*{;4m==AX|t#jXry-4SOd}%KKTTYUT2C+iO!w?C*^`tkC*eqYLFB=aOy zPpa&R_tT1l-f>H1*4_CSdg`Ijl07~zYpWnJEH>2();oy2t)TLH@* z)e_f;l9a@fRIB8oR3OD*WMF8hYhb8rXc%H-U}a=vWn`{vU}|Mx;L)GPfubQdKP5A* z61N7+OZT<_HAsSN2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMhd8i!PC{xWt~$( F697NCOilm* literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Contents.json" "b/LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Contents.json" new file mode 100644 index 0000000..f03d54d --- /dev/null +++ "b/LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Contents.json" @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 157_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 157_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 157_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Group 157_1x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Group 157_1x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a1b70e908e548e4a63394a3fbc006c3b559c3fca GIT binary patch literal 1639 zcmV-t2AKJYP)Lp)G503!8Q0d*50mPL)!`Ov3A3nl(SBB4UD|3X)S!&t({jw z!lA%B@6(TvHxy^A6e_^aUatp&$eHFog~Wpw{L!bz?h<$9d2X6vg@Sx$I63GH-m@S7}Ek!5mD!m8tUzac$-n%KGlpXCou`mx;*>`@r*^ zmF4qBe8ya-yw9Z>FFp;7oEzT1^7`P@Sl;`uTLUrW_>Jm54m0%W$2#z1TuMU1;eakd z*PuItu<(r6naRV~|5EB-P6d<~FQ~%tnew^qWV{!$uimpT4 zX|}2o5?aBJ94w_DJ|WxyJ{fEISqB-P_;m)6yqWxiEC?z9lnMju(>+oJE5s0%!A}XS z7(%VPeaDcotw=C0mW6XWmlpVW42+CiDmTmGSt?}?EfFaBlGe>wx&!0yL`-!S5X&G3 zzenNI6D_ZyROGZ^o-<8KsR%3~;V2k#g075U*r*P~h$)wCtEF$QZxrY>@U89;0;5_c zH82W`&P%D{6;F(3X?cv87S^gW@^I-&Oy_1Uxm58Ny|)T}C6$}H2--KgSSu66m$-Ym zv};2GL_dhneUa*i!SlFd{3aLkJJDk6^Il_3j)8U58$`xD6k1-s&wI^Ri;m?lj2)IN zTk^NhQk*H_SddFBIsFGd*dit>3l!G+d(VhdnBc5pEsTVOc1wx8{6@Aa{N^R+fFQew z5s$$INhm}v9YE56()JN|qLnsa*(lOv-Z7xASi3(#UMbDvK|Jo+#DMNNmS`|Af-G>Q zyR^Ya#I~6VUCJ05%ALIb<_QT$f#h^86*)b^Qr{30NeKnB7LwQq^Ow)+`gDjZt;rxz zCfpBA9T#a=O66wcdN&Px?|qk-jz&9_$Xw0T%eHZi@$NJ_P|w_z-{2h>ArO#7VA11D-D-6a>@eNY`t5>@yr|gQ;V~Z?cKInY+g07D2r0!u{D(&vs&g- zZ>>Gb_PAp8>=A^pKSh@hQ9?o|7!LyPCUkXv#>_1jYfpgCrjdLo%zaH8y!;@c@a)ec zt$DOGX!+yAEZnkzEG`KNb&C z4=3?CDmgoG2oe4KF|tJiSG7xasq7*xzf%|Ik1AG$Yi zGj3Q93J^Q!i1w36%qeD-j3hp`snm~q=N!{M2>T4?Rm$lAlEfN?V}%uZA#oB#-a?K8 z`Ya_O;Yiex642$iK-UhU2u*&oqZd2x1clO_Kg2=y2|)i2f!NF(fv~{N;j^3;Aa?Ay zjUr{Qz5NbW?gJ3)KF1mo5_Z6_2i&(@D(`7z%iD;lH22GfI+KP0T=#ajm0_X5y+OWX zULlq8j1z8H|c#sLc(8;{{e>zqSm!~&y4^8002ovPDHLkV1iT>6k`AY literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Group 157_2x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/box/check/\352\260\234\354\235\270\354\240\225\353\263\264 \354\262\230\353\246\254\353\260\251\354\271\250.imageset/Group 157_2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9235c6959bd9042f93c51ebeabd8c97178ae1b3f GIT binary patch literal 3332 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 O0000} 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 T!417T00000NkvXXu0mjf!&O2T literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/box/check/\353\247\210\354\274\200\355\214\205 \354\240\225\353\263\264.imageset/Group 158_2x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/box/check/\353\247\210\354\274\200\355\214\205 \354\240\225\353\263\264.imageset/Group 158_2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7c990965a7200db7ab34f005c9faca1433d0ef3b GIT binary patch literal 3562 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 literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/box/check/\353\247\210\354\274\200\355\214\205 \354\240\225\353\263\264.imageset/Group 158_3x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/box/check/\353\247\210\354\274\200\355\214\205 \354\240\225\353\263\264.imageset/Group 158_3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..38d71831f328847d8ae543d65aeffd3abd47ac38 GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/box/check/\354\204\234\353\271\204\354\212\244 \354\235\264\354\232\251\354\225\275\352\264\200.imageset/Group 156_2x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/box/check/\354\204\234\353\271\204\354\212\244 \354\235\264\354\232\251\354\225\275\352\264\200.imageset/Group 156_2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..10f88de837bf1fcd1b4c6e47d38afa266ccf2972 GIT binary patch literal 3017 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 E9~p(a zxSdZ=t(Eh!!Wy+hD|%n7xVS^hHT=p3E*6=IEmMsqTv@uElZWqtbc1-pZ?;!IWzQWf zdawI&;S7!Y{zVJ$I@oD8rxPNh*eaCM~nJ+x2Yi z>ysV-c1WDtU0-TjmM_5&BQ)9Sj>Csl+4m21bU$R~He_k=UiEI#kDV{%?wB(i*wbW@ z$Ly3WfMUa6BQ=08n+3vD}f*1eY ztNwjT{d>l8ZP=u08Clu+zi*bmzi0jV)}u$e&zM%Nd;ezn`Fl5hq#QO&VwmvwaJy)9 zT-?^8$}{enxw%Kz#jpP{!Boon+cV$0^Or~D=H&c3-rnAR?PW=BQqmp!`SbQYUjKgi z49yzDZH8Um-tYfb?=p*9{P~OZm%YDuqoZd({4TSz__mp~b@E{s0mc-Ku=R0QbMx1~ zWnL0sTl?!yS$Vn9bFBoclCzW5&&RA0s{Z(>Qmtj;qh;TxPY+)cqV+R-`La)kS6+Dc ze*53bU$$INE?u(Tt>H71F(qS4xZZSs<)z1^{yx2^;lFWL?eD(+yRWa8+P_+TRqmNz zcJiGsGr1PK)#cy+*D*(F#cLC;E8kz&1e$!k<*L-dU?j50Z~0^Q%uRdmZtz+S*>M`>-u0vtE~3*O^#aSazWNc(q14d02{kZPR z@`-6tdveu$v!`0^|6ly&uT<$b>zP6Qw>Jp7Fg(9>tSztHv-(fPyAt*YWwW*FSuM*~ zZfaVt`DH<7@t#oi+zWb}uBl%(&w0K3t8`l@&= literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/confirm-code-btn.imageset/Group 143_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/confirm-code-btn.imageset/Group 143_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8767a0aed2686ea757c4e11f17807341947b1c8d GIT binary patch literal 2292 zcmchZdpr~B8^B)`QIV!kg`(zK=`6(DMa!*BoK7NbMa=nyu+vjoWIZC=a2V&pZEEEp6B_z&+~qs?~`%?>8iRzYX<;8 z)!hx@1HcxdT)w8PB;TLEzndUGR3hE{umJ2c*jx(kKKkF~N(HQst1~F)9-Nk6wqcw+ zodBSdc1o@*0-&7Yj&Qmdt1v%cf9s;}7WRnkAK{-t@D5^eu3NrRYmHxO=+>VqvmpNJ zkM`{|2yQ(0w=zQe^o0kAwvdvBV{T!0vqFuN^D;zRw`tk1mZ%G+*g1M4CXALrb=9I_ z=4@jEHh$sSPvY|SsOi|%%r>X(cdZ@ZqbDaO9H#86846(VDVa=GLj6`$$Nn%lhNd7V zKNjmwnIw%i{JNFON)Ru`3-;qIK*IxdBI}43p0t#9hHfkIgsH)VF1ut$)fB*+`*n3} zAxcI$loWkLy{NE|yMnSC0Dv~|Z1(o>%SBH|b$nFpDcC6h!hDPHS*z~##(G4IHUMvG z&%*^XT#^ny9Dp8vrP_EXgEyVf4?si1`}3v(x%S#HY(ShrQviooaB_V$BJ$l#t zk9)fQ6p~_7r9Y#lD=lV5jz}sCYM$l82{YS!YYK~st|$gN!}RVnS7AEWWR3)Bsm%I8 zqIjJAbyCKGPv!~Uz4N!vb+e29Rwa#kWA>{uc>TmmvdrsTLu2-uklq{rJue;W`ooAr zv1PEede2?(^zu3pC!MY66p|?3Ebj_Ie=pxYnj2>#f7g=1^*rp)8bkxNC2R9+@=)vE z#j-1mbtkPW)(}M~_~fq{bxyKt`-OU>m0>mnIo8y5?QQk*XburQdJ=+8X>w0opJyiR zs<&C0YZM9U7)7bQmfhNhmP?xE{!gbzM_!mHP~19}g(2_0Mq0~@A3DA;#$M_^$iECp zRw=NHS)N*u<}CQTbhhoqdAodrq>LfauH~e3#MR878mru1pz0G|3F+n@2gp8XiEZ#j z3+l*2-K2mOEj9;vcnc`Y@n#&d#bqYc-RseZgsc47L#r+CKyA~fn$*Nq3c8Sj-&*8y);krDt!b4BF|%Kn#tM$-@4Zj(AEsyOqfnPGRu^vPeGrC$A7n~{<4Q(IE-P2m?f?C6$6FGHY$tzq8 zw!H zx>Fk?K=mZsT#p@ZtG-{GQ`-Gn5Z@}UTaTy>{bOVsz*3q$=c63mQsbh*)pSYCt;do}% z@75)Rp)bxPR*Ys@|4htT^1ajBl08Ffm7w`&9YhI2~L7kPI zz2pXlNqwG|XJZ40i=r5P1AXhVyGkH7DBc{e$}*I*JPiAk5*D#M8rd2+F55c6cY{lF S98%;%3UEJ*M3g&UyYqk1Q#M5a literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/confirm-code-btn.imageset/Group 143_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/confirm-code-btn.imageset/Group 143_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c83e90f1bfec8f1ffdbabf7e304a7255484c21bd GIT binary patch literal 3487 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 Wn&6lCJu<)&gTd3)&t;ucLK6UuE$%b` literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/send-code-btn.imageset/Group 142_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/send-code-btn.imageset/Group 142_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..93c13ede9e0027d4f740e2eb088acb2788cce98f GIT binary patch literal 2376 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 TgQ*6v7s%y;n`7NM#J&Fkh^DCB literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Contents.json new file mode 100644 index 0000000..12d3fa2 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Rectangle 11_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Rectangle 11_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Rectangle 11_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_1x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f50ed214bcaadf5a390a7ead978fc20999455d GIT binary patch literal 5675 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..89292451b7774a9d5970476b66d529c818e1aa89 GIT binary patch literal 17872 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 V?3G0S-&hzPsA}IUy<_w8{{b)rZFv9y literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/text-box.imageset/Rectangle 11_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5898fc5662e5adfffcfe4b48886a82b269865013 GIT binary patch literal 34933 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Contents.json new file mode 100644 index 0000000..096e019 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Rectangle 172_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Rectangle 172_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Rectangle 172_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Rectangle 172_1x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Rectangle 172_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ff48fd278e9a687dfcbd305b61ed4b8c02bd16 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0y~yU~~bp4LI0lFzsbGA2bFc4V2Z`ekcQ09ZhC$EB z>C}`&W-|u0&P|Nc6LN&CruQ&RVozZH9QDgz(7wN9Uq55rr1w?bk3UwddTDe1^TO}@ zvKji{$2~Uddt7=mXS)B<4>6aEHmsMhGi@lnalJyaZK3bwFITnO@=HJ5WVrUWGI;)V zwgZ)%k5)3SiHQ}LGvjRt<3DBX$ihKK)N$74d_8Z&wwHVB%^BXE*8jYevEa7f()cvH!^+-^BnpX%q)j&Ld(VH?)O}jdz3aFzJ3IUO zu+>+Omp%4lWJs8+d#mh=g@`-9f0WF=eACK1k3M(;h41omH?2SRxG++0diwXt^~{A< zbN6MpZwDIaYkd3e-Mc&Y?D=Cg=MGy^_u<237J3W}IZM8=R9emS*|&A-k@wsGJLWY0 zSX?2<%8;;ltH+*Ow{BIL?TWUw(E%#lrEYF+zCTO*=yYHR{F`z0(M2N$hVozg>f_$q zweT`9H1CaKV0ggT$id(s01RT5Q3mw_p+!+Z92n}e_Py87x?T!qM!i12D{AdIV8Whq zTl9#3X?6AQCA{l^+}U}C^UwRgdinBYXtY;NFayJl68FP-CU2&le)|1n%BL;7%R#B3 z+IE}t&D9B2Jb94LP<>BqH1>v_ET+WhYq+w6N_ Ze(OL>kM7yY1;G5n;OXk;vd$@?2>@DUHBkTn literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Rectangle 172_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/text-field.imageset/Rectangle 172_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7f5227e8a6a26621ffb8e4d827616b05f93636 GIT binary patch literal 1515 zcmeAS@N?(olHy`uVBq!ia0y~yU_Jw6PvBq!l6QL^)dMNc0*}aI1_nh75N33pW|#mJ zWGoJHcVbv~PUa<$!;&U>cv7h@-A}a#}YlEkYV@L(#+q--HqSIxLe>{HN`HWk7 zoXa|eoChm=Zl1ceQugMgzPm=tf^TbQ>|oxsHMqB><*3X01?y7E(iaQesO2*iQ?-{m z#!+u~>2T$_?!EP2w-+wAIdt#dy;o14J}p~*`R6Lzxqi!|OZP_st$$!_KKrcN*2MF- zL;d^x{r&spKJPmB|L&ajPpf}DThD3)RN{YR#k%rRS-$qe7oGV_<#%n|y!rDhAXw4% z>GZBDpqm-ywUsIC3BUgD*RNmgA1i9+$#osP^ZtANns#$1Nd|@n^) zBw4^_GaUpO+L!=L0SyiY%nS?;3NwJNQxE_p41rPQqaj1bL~u68Y_5(B=LU-EtbgBj_~C-P zCHd=njz4~Q?AS5!(%sQOiG-6|;=|W%{PXSGp6c&uz0cyWU%x*8`r9&4?tNMqk^J+) zyViGq)w4|GXPN+W&IX-llb<&KzP|hA!=FojuK)CYN#$0cDF=iv|NH!US>`@_Tie>n z@5<$?5__M0mOA_X^*86(XjcoM&JQeG7RD?;Wxr<4nwr|8BBP2IJN+t`)a~CN&tLtu zH~z}j*!wXKAayrq`%iK&t&aKbzBlfDje$hXr{z=sGa4D(w3(aJ{0L|ngQu&X%Q~lo FCIA>P-BbVo literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Contents.json new file mode 100644 index 0000000..2d24123 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Rectangle 12_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Rectangle 12_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Rectangle 12_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_1x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7e41ade49336705b7deb42a2f566bd681e9a87 GIT binary patch literal 2412 zcmeHJ`BTyf6#uf8xtT}nxSDu$JENnkn-v=^uBK+;k&&8)SFTxr;E`Z};9A+Cj_tUs zg_-V}ji!8!HNXogD{bwtLnu!)P!beyl1mVm{)PS7nfK<+`^JoL$|D&&9~X%33&iu?eJA00OPi^8HD5=KO78zuU+TN z&brK?$RGe+V>Tc-uAbGR}|Df9dWBj;I-! zZ&eZs8pAK0jot;X*gz%qiuANhjYhJfr;#YHt~?}&dXs8uYEl-| z9ini#oZ>^7QrjI!NO|K5%buFbh8c6*6d1rg%9_oKa}Y!A7~ikTBjVpG*ufp?>FMIL zZuD-*$8WmMI92^`5pvYfS3f|x1yEi==Ky;8pUMP$II1nn@744R!4_UJ2Em7 znEztt-$H|Cg_W!g0MeV{20g2*s(Q!A+B1hTGtZncy#vZvk#O+$XiPC&G;uWvH_(=|^7!ry;U zZ<)HO6$DL7eV45Rabv_ryoc>5jUPDPTWAe|B|g-fORj|W_ee3}xqlYM=CTucVFvBnnb=Q@nJ zz+BadE3{Xhq_s`Xo7y_*av^i3OGok$=$0^oY&2_ z4}n_g>?{NO0nD(0tm;vhwS3h*cZQ&TTF@nU9pnMo4nVU=4eF zFRF6-=!BQ+u&LhNtL=nRs8NdeZ(EulkR;E4*9@f8{Li@+u zW?fTkLsb{^9>3kOhlJg3ToAOxchg~81e_R)NisJA{0sl)=kVr!pAUwXA9_@Ms+YI+ eOo-A6Cg`2a9bD>3`(g8Q1RM#C3IT&ti~j>lQ!7dU literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..09638100d94b3d16eb0ad82e1204f2c509b50ab1 GIT binary patch literal 6543 zcmeI1iB}Wn8pa1u&?=h?v;xL^OQBZ`SQH3rT#A4gQFcLA+Xl0-FM=d4m4Fn|TM87B zMX4f7LJ&fL2vI{zWtAla2_Y;3A|wzX0kYoV&$#C>=ggUzcb4z(f2Jf=ure#V`M&W#l-Td(VCM-rNKK z*++kHJkvDu^z+_({!giUYuceT7x(XOD+J$@uk8 zS5xoIyD(Uu$kQolss2XiTHLZgWnWq^ulW6p$GN4g+kfW83tN(fFh-rS-yW&SLq~Ba zA>4w3f}~$ARD`gmRs@Nt&L6CA&41=PIskXXg30icFu(MKY6;(j)Y;#ppfeSMbnvzJ zZCyc!+Sdm?3D;He5X^UhGOP&z!0Xa&!Ws0Zv0=Ms-U$8HA8JLqPEMvTr}0N<-`4st z8~`BHLxy5(Oc5c{y|bNHzR+AT(YJ&7c>QF5k2odnmNB_LDzQuUD*cqnV06 z2YJH0*+Jk=SkwI((dG=vY4sn&u(dOoh?Gu~WQox;DquzTy=`j>N+(hDoLJbxpDL6!eU7knA0NrO;J%1Upi;UyhY6=P;O4IAm!H~ z#5Bp$SK~=sEW^OikU5lf9=OA4FzN2@=C>#$T==kNdZCUiw67Zc&c_%!Y!}ch_Z>=qX_iHv9mycT6Wupo zdiHFL$M;VTF=>M1uray~H)|R`BSbp`masH62Y_o44ubn11tXH(IaWJE>ja|w)W+eRJSu`DGZ@QGkE8n zSF4$*v+xfY4CB*Dgy2)S>+9>B4zLgT6%NtduC6XlyL{FvI?P$j)XZRcx{TMk(ceWh zP^s@J_TvL;K+LlbS6eo+bP1a*@@`qNzh&ErSZrj9$e!rsvh^`MDM@l(d|o#J0It_x zs2B(#IZFZw&eI>?&Y-0ijVbKNY?iI_VHU8v!T#=2IiP$+%hp=G8@IhCPpqwpkdT2!?4&wX7NSYqt8 z7DkMDJd+2GGW>;t>j(fNITB1q1G0ZY-f__D)fKBwA6lbRZJv+aM9Pigqsp`3*rYbZ zrlv}_&~}{w-h=cU7t7l%HaGuOI_}pCM#dX6CJ@Fh)jKO-Hel?G57Z{sRIL$=f< z#>dAC%<@5Qfe{+&Z5aR6tu@IMV?u1nIjRo4$B@67Gr^{A=IQ`IS5Hrm2~@9c82~2l z(dlR8G%(nzbm(x=qbCBud-2`P8rHiXUeYvxJKk7W)WMEL@T;Gsd#4jw;FFgB(o+NW zsOtlFj_sW6G+}2Z>`<^n!43sG6zov2L%|LOI~43t@PA0b$;X$>;z1MR_mK=U(A&B0 zdp9K&c9c~1d0Ql%D)>VUXnv7Ft-4?*|Jwj;ElP<*3VCNE~@@0`4~`F=v%w$`hG$NGF6IY!V{Aw?B<}S6#_IU%&lInygipcgWS$3 zAN5)b&GFCgv~e=lwZo2`rWodd7KdnQX$gtYR|7^!w$4tm(;bG3R1yn^y%%V8LGahR zJaeyrvlAROfNJS06OHsi@{#Yjd$_SIyn94>y+@`tg+fA3z~|m~6wJ zA;Fb&_8n{>jFLZ#=i|H=!WwPn9lmn_-IKSXnNHQyZTa3rrLMdi%RyfmwX`>8uT#b0 zkjx5$EOd8|AO$oGm|y{_mhA_9$s1O(jb+sZ6Uo))RK?V0bq(dw{_Yg$0j_m?+W^U+ z?ABZn6GG~A1BEN)Te1jsY%|%&787N6oSy%2zv6c@{Ul5I4A>-N=xP)ts;bba9gF7ae@>u=+BQ^UiV>;g03@~AWsL#Opu#q=MM9T^Pwx*Vjy`{2L4$JQ)-EFS3&9pQdi(q};7dLg z{o=csm7bzg_Z{qOk3Ft_HaCSb)v2~5wJ#u|9fD^%xnSOw!B*{?)0L&EpR3x~cnfx_ z1^c#zjqwtT>Yra&qvgiVsHi&f&E+yU0e=O4D)8F1uYC9DRO@pWUG%uhj;w=xZhN|n z`f$~5`&*9e+p1=QN=f)!_$wMc#Cq5<`qmA=pM>UBfX~ zYPtj|)$PdlW?ACh>E9l8Oj;7LJ*LUq<>fpwRwA-lM>KO$sW8+KtEq9k$$%K#gt<9i zK*#YMK5K|FjBsCqpd@2cVMUi(*=T*)q8`_@K0%C!`#Is|n;X@Zy2DB6k}}X1P2r*J z{`6%kKHSyNQdayGQF4Ty6|s+XWS3-!l_ZF8or;4(>l)#Y;=qv*4fopdoocI%dwP3m z^HckeYZ9Yx&lqW8KeUYeDRakwr7RxeioiLFTx^TRaGM0V(p4y!be$s`=Y~WgRUcdC zOJ!$G=qE8ltbF#OZXuUOJe;E#j7xikNE_}20g_gJxMbp#5_83;L-@~szg8q>9>$Yx zxvQ(?`0|p)k$=Yu#yY;}GVFhBzm|WzH%V)~4+NBxb7YREVnLKK{aFXia|3EJ^3}d-H%{sB)d1Jp2Jblww;>Z9EAIeC%mUyoG zV%!za-jL#dH^DG=b&X-81&@iWh~m?h5O5R*q|=o(u;fQ(>VQ0sRuv&0FAFfnKXJf` z-d4pDd@eokL*&q=x%UMnqxoyme&|1y3+xf>zz+VITcX-jPp= z`6(7r)s}I~ih|g`NH+K}-FT!cnt^U1vDojXycIohX>I8;NmA$PMe)Q7&7YxqvS+gr zp147=s~(P1Rk<4v|F%YjIxdgaR}eCj(zn*Dd@6(7aZ!04Qh7qLssFc4?wEPP?cZR5 z+%f9}#38~nrT(&BHUOyLSnoj34zGYo=hKdkviz~K1vl#zoIU zo%1{c%k=j7`6l|#WuV|cAcK< zEv`gY-TKMqKxMFLlA(HRt8)}1y*;F|S%Q@M(<2l&xNC=H{6vMA!)!RW_P10{qwyM3 zd#4RN2SM+XgR{OVLseFCMT3Kb11PF3^me=11Eha33c6oLM(74qP+cRrb&8x>d}_0U yJ*Kmp<}fY{3@rj3-#k`!?6w7+4K6JzNO#SiQ9oDPMezR#;Ng1td&;@+d;bHamffcS literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/box/text-long-box.imageset/Rectangle 12_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b83318d1a48b668519e57a5774063a38f2516e3a GIT binary patch literal 12207 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 USGS20B`O8%ZLpYDEC2NW0jm(4l>h($ literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/btn/agree-btn.imageset/Btn_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/btn/agree-btn.imageset/Btn_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c5294d51d4ca2776ed97128fcf13f667a11d474b GIT binary patch literal 2599 zcmbtW`9IWa8~)CilhHv9*(Hri2c1#b*HL6CYntq18c~)Aoh)MsWs4~l4h^!DGK>zg z3^T$EBIBH5XiQ$qSh9|7vd%l+zu^6R&JWM?-1q&t?_aLxbKTdK>R@Lnc2NEx003gv zR_0Cs08SCa-p~VryWnFYPVk6?Shj~-7TC5aU#E`>FZ+Gfp0aJ8xyh?mIyfMm_e>vk-1s+ZY^w*@ z760H=ZEeRt$czWbhuJ!LgC**v$&h!}^7bORN?3%x*8BcMh5n1{S^hZm{Vo2kpC4g* zsaMbNJbAHaS}5+mAAulqsGT{wx)W=Erp}SX)RjV?N}KDXtvlb%Pz3-~!rSq!zZy*5 z4fsD>Sahh^D}pAQo}nlrs%%Ao_!oii8pN+9j^_<3Sm^Cwxg2K+aS(t?@7}mWw^F-htos!p33)p0sx{HL*_WQ-4|(8s8uXT{}`2K4%XES zw5LLVR{#1}4SNcgYxkg7i8A&-@f{ zR%2=#g35Mlc>+wmmB$^Z%N^rHBRqQU@TY_EytQaF?w;=M7TZ0n{(c}jU!1yS#T?aN z*;@!-OEe6tN3(UayrS>MxQPz%BBzE*F2MUGrOb;E&k9Gn6Bx>u>c9Ro-KlhWRZ8lw z^qe2F^JGaHL8ES!xP<%tJb+4Dn!z%H2(bMMmyIO2z*%T1Q14KZlF5psZM zByF#KC^=%KH+*Y;p517J#>H@!KT|ez!9-s$yn51NU9$~cfsf-5K^&e9`r;+=WsdcEXq% zuuz;a&=~r8$HE)4NkUXlUQ1*)z9oAu@t5A>)_UoxPNQ&HO8BxbD@3-qIASu9#fdS< zXqM9f!CY>sr6AEa)mVk|WJc9bALsBtMAb< zx_@JK@^|O9tEysROb(?;l38&c^oi>g`LHCzGt|zxZ$m4CIwpT_uY_nsUY|BIp?>Mq z)5Mv$#@|%AFm7pK_4wxGRSO4ynIkIk3+!tezbv_*@0;s_LrWX)`bFdg#-X?wpe8n!pj;UbNBjv^$Sr z#uiO3alfJ_B>iZAPA#m&U8%W{v|jsko|iM+t-`9ON4H$BGj!76(i;f=Rxfvan#z5q zJioB%BWv(IF)YLP9u<=kN5zs%;fmm2ZIF-y(hsK0Vb6;lOTHjyUqe$JGjP6^d~C4N znwy&;L51km@?DQpM%2sXNfXD{X#qhdC=I{Pm+h%+6%N*;c|=zCs@PpgvhbXDW~&_G z(}DqAb%Ur75quJf5U^UA4YoDBOSNa%zz76rq^RrQ%QQ^tbj}Bppo7 zT$oVUW|=b1+mi@P*Y*LO{LVm3KS6L zaD>bL7QCcOnr*Dvct}ujMb5v5seQ>h_o4M@hoQ6BgXCT%K|^uzkbqK-XCdCR5{Dm9 zYFSuWF;&$bmE~{3w9w^Ma{c1m*E)u{_wDx`qH8DHFpo2CAKjLSmdM9q^28K533aP7j+yYYOQE}e=HOWv75^Z4d0_T zFJ`10+>oO6@zni%pP6Fmk10I$(aeRBX{{{q6# zxj4X?^lTalE=M2Tv3Ax&ts=Lo-;D3X$xT8gU(F!K*?Z0BEm! z(5hx~vMAyV1Fmuj;>vUx^|cZK%|?Yt2^BHX%rHf+FECpzho3yMAa-6-2Ii%u#7LWL zD$p#K=l_dS)H79DvoMwW(#@{dJ@Df&c#gD)emkh%5YvJONTJ zjaLd}BeOv$wrTHusd@PhGDkrbWC7GI8^AGVKwv5oAqXxtvF)I3fXJaM;Czqk@2#J{ zbRaC@f0D3!6!2<_h zoR3J^i+_zlUdK=EDdgJhotZt{}OdcTf~6yX0VMD zs5$YM(`?7R=8Yeg-lep2V*H5!kRp)H22b z$yb}ZA%s{yU`P$T^AX>>T452;RL3__qR)fo^jp^H)fS=`22(>9W;i)D+MJq528yPc z5Q!YhPRrs6pgxzp3IyZJ&hqbX26QfBW_Et1OO}p8&h=+L>MZd{C1v+v;yGfm25^o- zKio;-9}2nlf>6~xctmHNVzjzd!eqwNsi>`dLrPfZVt*#pBdKqQ-pDwG+^3|xdaziU zQY}la#jEmCrEUW4x}br6K~}X{n>K_J?+*tK&+$wGTTj~qD7mY z0)YIPOYH5ULK)jvAm=`xc2Bv$u#350Sd60`ip6%^_XL^;6X;Ci^+5abmFsy%R3R$4 z_Tl!bMtUaC=c4BE4V0=Ru1ccKZg1<<{@%rGYd*m5uf4dj@9XmukWm#%qb(D%;RBj(_O-Q z(WB*NwO@D_lj-fAinrej8ZJ0+?}nN+4MYSu(Aa}o$5bbg_0w@~W`2{lhlitEL|KAU z6Z0FR$|FJD`yo8qJ_+{1tLR)uGABF)%tlw8scBd*sLs(EzbGT>Va-B>jgq>LgL<&c92 zCy9J$+K&6cu`jjAkij&n{RcK%2{3G(E^xT!w`f`=keMcsUmIlYT=}7LlUzOlTSEfM zNXF)DoeLz!((<7gy5^#6#b>O2xlENoV}X?Y47O+J1*B=>iIH` z0F^r6o05Y$Y*wf9WoAt0apkS#=if|ysNrS9+Y2o4`nno z8E+$zmz@sJ{&zXSr@kSPq=CK1UZV~MOD5I6p5p9J`u*qEmGn_#m`^x5+21lgT_UHC zqu&4q>~BF9lVc}#9x)QvqW;kT`&uH`)yvQ4Ax9zq%)Y>xr#zBLg4SNQMu*b2_K9v6 z9{|=#?L6%tVDlB&y+)CoHGGzLdfE+1_+~{8fYgC(zpe z`A#3IEqK}Zy)w&`&N!+B zy+8%mp!>`f?utRPJCk&C7rUm(hRSNH4%6-~sZB1S^xKJV+a{vM95=#1aqu**K~5DU z(xGZ$uhU`N3mepgo<$!QB#@)_%|u%+ThQ_v&#$$()IYp+87Rv-FdL5xE2KD_S9S>T zpU#-?DvY8H-X_f%l(Y&yb3{QIubk!E4Q;iMf%(?HfcoRVj#3W&>=F4JH<1FHCq%GV zqo3R>Ht5ywvs&Q-!X%$!rqL|5`S|hbU(|HTEc9|plFAa-=ZT+e^Fm;BRZ3SpD~823 zGvK&C%)L(IW=83cUX?v~XqnaFW`$ft|EX^Sr=gn;gHI-Zk+l@rJ%^jF>xgpPYSHd4rAxr?I}m&l%u%?cWG|jk(Or+`Ds>fU-Jp6KsqdrYHNPpV0ehDC zVtEkJ8J5B9)ka$KL0Lp6ylKI?!4%~Vfieh@+?X-FkEoriPUb$nAAau=9yeZa1_+iU zmQXe<`i)SV90C4XDAfGI~(Xcexio-tglA)cGGNLa>B%-R)$Z>`&P zJ)u@o{MA)~_M|pw1(w!L+xh&Xw|k9*`g99FRBO^`6?YBA!q?ILhJ>w_Eetu)HXMcS zUSJ7A8~s>c8+SbktfOBag+$8cC>NVt*^^+qI%q1P%u+XxeAj$7P_k+X7@qypJhZRLELK8>BqtB)BWHwMII*tK3cMkY_V^8;X z&1d{u>R9P-6=F^|m#)!Hsc^-=60flm0(|l&&jS-4o!j+pX4oTu7w17lmNy)0&0Zw` zCgN4K3IHI-_<&D^4`MFGdciinHP5fmE&AaS#nESdGl5Th>j+TgcM`%j9DF%XZftb+ ztZF)#(`^h(`>|g*H#aV-msN_-hPa<~Vo9I9XF8szCPB3Lc4d_tC=@v8qimL&A|IX7 z_^Pg-u{AKWZdAVFT*HMyS0axm{eZeb!%DIAgHvR5cc= z1gtKBZ4UsPDy}O{Qs>U{GibXdlax&R|3ld0DSr%BRp-7QUwhHf=H?DnkW#6 zZEAbgz7uf>1ZTGkxW0g?2ms)iAp|s|pSzn=HF*YfBmg{PY;5?hDC{K_xk#M__ownw zkceq1s{v0d}2N9LO; zVpiL}+;aNk_`&xlI6VkvE145%xUzEvl~*_d{)KKdY(0vx<-<2!NfAU^{}eZ>OUVaW zPT2|3S|<@N;~?{POLB4<{kUn5^8+|9|63rNnoX+)o4u*N<4aXAcA6tBJO^>lFzsbGA2lQH+Ofk4~EVnLo$3MC$4 zYS|OkxNdTgm}2zd+*Ny_v(=Z5S~AUFR1tE<@_cR0*FE3&h#q)-yZT*n&+VvVRV6&( z9P3#Ne6IIBGP7!%9=DJC!411Gf%;!hV;GKaTd#1A>49PgL!lPKJQhI(x}h)udDa8Q z9s5}i>}%Q~%JBWNM6!M$OJDA5v3tkSp_y@u=C-}ztDKddX?_LaRpO3O9v Tf|?~Tpcp(|{an^LB{Ts5wx()O literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/btn/highlight-btn.imageset/Rectangle_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/btn/highlight-btn.imageset/Rectangle_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c02d90013a01b01fd05fe910d396a5fb3a2147ff GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0y~yVCn#}6FAs_&u3ch`=$Lr_GD20dWp8g zz|*UqC7%sFyNQvZfUnH-_N@DRzkkgZ|8kjGw0(Yd<%&oX28MGt*FAe@BBI|{uEke> z<%=cvEYj!qQSQOr7V3@IZeyRG$-#a$)AL%+AI$KVgnZY1FUQ5XQ zeB+NBdpejH49fjYr@!Yb=MU#)XxLdD|2ef>9ybKI{ zdQuDwGJ?QxVrk@Ha1a<}P%jW9mBOhd@AQTVh;>*wb^z&hZmX2Ws3nL z$MW{qd;0pXp06z1XU4$r>|NfUoBNN(Ox&^Z={`mVgYfdJEw2j~%ge7les=rTJHQ0; z?8&}IA8vp4v$u_&xFaiAMNgW6;d##g@WY2MKN0`Cb~XRPio44K_GB?I%xR9DZC7kj hcQUQELSFR`dnb$kBZ)J|P5_fQgQu&X%Q~loCIH$&@E!mF literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/btn/highlight-btn.imageset/Rectangle_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/btn/highlight-btn.imageset/Rectangle_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7524ae558169857c3efbf889dd2cb9a544381af6 GIT binary patch literal 1364 zcmeAS@N?(olHy`uVBq!ia0y~yU_Jw6PvBq!l6QL^)dMNc0*}aI1_nh75N33pW|#mJ zWGoJHcVbv~PUa<$!;&U>cv7h@-A}f&l($mE;q=ND7-M4|a9YoqLPSsw(66E+o zVM)^kM<3QkJ}1^jt_Hpr3JaNo7~d(pbJ+Qs->p%+Z9e0C#hY+0&zAFjF2VhrS$td4ya zdGu4D@M$1t!`1Sc{J(T>wu5{%!|K(+KO2FjFa*zUE0p=a?l=+mZcG|D|rT4PrkxJ9;zFxErzJ zSC56?wr@M0e!TFF`hJl0H)OAip8ou@@#bS~Gw~alz}%1!9%Iw@G;i9vHQfGLmU*x1 z%RpJ=`wIK>uS+f;@aNJ0TO@P*Z`8Bg+U{?4pgg}l|992X&u5)CEEaFBT=nSZifM;u y^_#Mv)m{NKze2i7L_aGpJ1^^99M{ve`yJ*~KKS?S6tLW6VDNPHb6Mw<&;$UTFn0+6 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/Contents.json new file mode 100644 index 0000000..1d0d803 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "하단 Btn_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "하단 Btn_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "하단 Btn_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_1x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_1x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8387158c43b4cdfcd8719a4fe9e90aabb389131a GIT binary patch literal 1206 zcmeAS@N?(olHy`uVBq!ia0y~yU~~bp4LI02~nl z!{^?lnOpylzx2iDdx`IA{r90?C+t`dxBh(k?zbks_f^coqcxyBpsgm(|mtkGA!8s_tNygKd&+}Y!mJH z%*Rj_V;1{k-FZfam~9Jed=!`*9EiXlCNo=^n3_IKOHaRh_wL-?d-n9yrDbHC=HG54yhl@+(grgc4VhIi`idd#rA}jte4`}P!bR{wY7bF?b@|P z&;9)U|Ax6f+_GcGi)NqswG|Z~j*Iq5ML*xZZQGq^&(cnB<#L$2S)sPB?%UNBy{jE; ztgJpA{~WUR*7H>>7O4sdIx8%i)U+mIqGrIYnRDiR`Mr7b=4r12A8YOiIh%R9eX>(Q zZSCFn=g*(7ow4eySnTFqyI!TGrTwWDb^iI_fkIU8ETAVZtr8bt5}ays{rWnoo{bZt z@%HW8-~IUUV{)<8vQq(97i%4TRGax`)ig`rVD=D2 zfs3ZIy+d|rZgIIfS2p};_>!`4(byav&Fsw6&ty_FGhhC<^j#p#qO@ySSlH}C7nlM= zA3l7zaQ&kzkD|0!Kh7!-HH^}plV04r>)DehOH$_r9ABy>adpyd3&YUsi?$1PyqM+m z;nk~C>~pkCX4~s5uC&>Dwvx*~Fd)l@_073+ed|p`^SDBKSGP)C{66)fSINy}2M19m z!PwyHY{n&1U;5n&<94ZDyVJdQv3vQa5W{0)S)WSyQ?;Kg%Km(xT>|LwkeMr^F5kO# z@6oA(c}>f1Z@75lTHfuflHFmq*KMA5_g!&G$(GcQ%T~>G%U2c%^eiqj%b&iy(rW9n z)GZShi9RkXD=+sxY#Lv=&$aMsWauKMjj^trKw|@s9?uP#8kw5be=)?CWo=fFXjG)@ z@=6z5waMS7wXf=avoERt_6@_g$;qpObo6d50D80|D59qGT9Ee9pJvzIynnx)WzjtS zKQZ5oZO&Rw)3jb5e^Q|1gtEZL(3j~|8(-xnBrJFupC0mFyp%fCF$Qg57y`!}!kA-n8vez9dA1h)Qr{Fea;JYD@<);T3K0RVoMGuQwC literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_2x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7f77eef287954b32d682d1e5383db279c3d4b4a9 GIT binary patch literal 2145 zcmcIm`#%%vAAdHhGtN<_bU7hSF6EnPn1(W5J19&^N|Q@{%U46OOxhabL_(62g}J3H zVv~-`a*0|x#i&%%(OhzdVXRzsVSLyB@csVq+}_XUd3`?5>;1gm?kY^&&y$J0QhO~Al}vgGDIqB&G4Usy!vK)W;mFeZ~cf-H^bU!2DMl$9`<)0ZhHo5-1t^U10>0>yX(D_+p>qHeA$>$h6C#Rl) z!O5<<*kXb`za!-*VWL7df^Qs9_f1bvb3;-BP2`?gy$A~Vk(qzLOcfx!pemPKk zVW>^wTXI0%N*___fTY>aPgIm>n~g%d#L7|Gg*cy{4>5`}Ye2i)S}VDa*brG6+(t`a zuMRVDtbzg+Nj=KcoccI6JSHdVH=QK&h(<6dcym@Uanw1YivV4sic-NO5Y7OgHjN(_@8NQ0QO) ztWt2Ww)CTH!m(zGRP}vHIXC{u!nfGJ{0%j7prIz->k^09$WckyB~?Ohh^;y zt~`bJ@^jZnmvuGpCa z#)jDLiagBGm&%))QNh*LK}|BVVf6E+uotNTjJvzU9kQoI^ zdblO3d&(A??-}GdNM#{})mf39Hti2J_sRRc`!r=cs&n}7S4wx?w5>GyCtK@(FD*(# zvQG9iR-j69{?onZXcuq6Yzvtkd zNP8BB{#E!#6RDXJ(|=QP!6zF7T#AxQa zMTg4iFTA-&0yFJKOkY>Z(Jm$H$UjN};xEiL+IM-@hTBRiq;rQJBmK5L?X&D%CV%Ba z6fwQ~W$@zJFA-9VevY6rB1vqn$1vDo$`Bx0r)_#1+gt-nn4aD^U5;*KxquU%^pRi! zwR%3RYM<6C_CoG0JfnXlFzxQHu}sT#g>3?|t$k7XBD%(T20r|7^Mo;N<@9sAk>!yW zY3CpFZESXH_^RfIxWmY#LzdPb#qo8iwLFBmd;>SCCywyvI)Xv=)6~6n4Rr!>49L5I zg9ZE!J5IiD#b9QcXJGwM1*DAwhpy{J2fgNqJF@l$YURJ{>adY^$$QLm`C)VKofAsL zPj~9I?}H(0kwMSs>PMH~bmsE=W3g9N^KXj;OjL+6E?rSINV&oJqs8SVfmQ4=+?l$W(bgkt{3>#Zt zBtXrb+GN?u^Ili0g5yK~Rn7|4*Y3oGo2<{Zd^2|I0ovB~$;9k;;>n5oOz#*6t(dY> z*p@puSl+S1C)dZ{51F<27i=Q{g$8oJ{jLUs&SH5zn->m?!=pJ`@Y?ShDcETx!DsWw z+(@$pby^8!h`%!ZFunw3%~_)}&l6<)JIY^zot+c=EV;cA)=`9HNC4^woh#>Z8tU>Z zd`xcY6Gz`fj~~&Bd0T6$9_t&5(6wPkYb-|BT@SLBmO{8r?SWlfmqe*{g@Mvg7(!tlTX|>fX)|W(tGlSa zMUV6iq)vJJ_y__3kmc_>2Y?O~0g{q&ns5_62(X0X|6kB894!C>a8Viqh-vJTICC`G z|4B+IiFdiGy2OTpq$-DGMfS|!^(5|x_(4s5)s$Xi=gSu#P&Hc6xN!Ju$Zh}vn#s!E zg5_~>7t^;fTBKT1&G>5!?ffN<@qX6pB73#Rr023QZx7LNL6q{tv)tKzyc4fRQ0gI} z-Rk3;{DHWg2e`8{oC{M{0JIT5r@fa_R%xp%>in_MB3`hKy?xw0`n%qR49W+W_~QW3 p))$LUrY-b3eXeGyEmM3I+tH4Ss;E5Nq~=Ee4*o{KbKF9c{|o71*`WXc literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_3x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/btn/next-btn.imageset/\355\225\230\353\213\250 Btn_3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8b1877667e5f41d37cff9b6c62b46eab6f3c3433 GIT binary patch literal 3152 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 NJYD@<);T3K0RWREBqRU; literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/btn/success-btn.imageset/Rectangle 25_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/btn/success-btn.imageset/Rectangle 25_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..697c0ae50c5d710aa857a9e32f73d90bb8b52823 GIT binary patch literal 1491 zcmeAS@N?(olHy`uVBq!ia0y~yU_Jw6PvBq!l6QL^)dMNc0*}aI1_nh75N33pW|#mJ zWGoJHcVbv~PUa<$!;&U>cv7h@-A}a#}Ylf$bV@L(#+q-9TL((PM9)7p(nGm3M zqU1qGL{hsohwPC?CIe9h*%q!OtpjgvBrI!g;hQ5n$#JHTPRc>0$CfjVIgc6fPn&+E zICl2u?{k^*_C8;Jm32-2*X+d?FQ%Qneg5hzzpsC*LZh{TcK>+xwf*X?y02UBZ~yta zTz|d4UQxL9`$tAocJuSEe%8-o1XMHqpi;~7+O2mlUVZm-w)pjB&)1wbdska=TTRW z;V_r%t<@ij{yg}y^WB$&29aW?fr4vh?OXr$|GaH>g+_^SKGU{~Z~U_cD4bAgTesW% zo@CjygEiT&AO9*W|MOdE#&xhU*B|Em`_6y)Wbfgp$~QOX)y3;DGcY);?cH_plk$zz zoS%=~UA&*g7-)!&?(#Et&sM+Regx#7IT6ymZnI<0-k!?@<32{ zO|5^mYW-P|gx%}x+8!rh0vu^Tk^^iDOOqs! z&2*3lNH!(_lR$&RsPfT}paA=Jmf9X`64>RrZ6@?6jz>U+$iMuXeYjC|U6I-^-xnziR!zpBrNTg=Lw| ze>+7Jl#8_UX6W^=>nm&jn`-diI(3~oC`+tFCyKbG^{q@?l<6k4qZ|7Zo_dWDA$oBu$ zrvvJ&X7`sboBZvnz1!AZ3ub@6mw$E7-OSkCduN2_>*d8lN;zGoom(@3A+cTCbmrM( gzn`~$Qvc8J@!cuIb&8*Ofd(;ny85}Sb4q9e0NX{;$N&HU literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/Contents.json new file mode 100644 index 0000000..633edac --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "라고 할때 살걸 (4).png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "라고 할때 살걸 (5).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "라고 할때 살걸 (6).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (4).png" "b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (4).png" new file mode 100644 index 0000000000000000000000000000000000000000..785cc7d3e47657aec1f80a2154b4e316aac46ab9 GIT binary patch literal 1754 zcmV<01||84P)iDFd*@<02YhI?vf%$AWhT0`~ko^PPvv}$){6|73ex?i$G+SW>|zYmUoCSuOy@i z^D$GxjXnK4QUz5Mp8Wy7qZ)senhJOVeU*?g>)C_cERW&X)1i6yJTHIJa54i&JXLm zk|RK7_Bj@WZyRWR=z_Kx!-Z_k*QY>l9BH%W97ej%2#p8H_gR7R0oQgveJ`UcJHeR}X%WWqUwkAez%*l5QlUb5@d z%K_jOc0*cTuj5cQC+%;stDsBpKqY*AKA>M_gA@cLA}~(!!**9gR{pA~cg$bq^l;2q zW!k6-C@?NO!br#Iflc;Fva4$iBekS!p9b{QoVxb{HPV+MJ(L;422(mI8+mJXRMCgP zJf@k)w;+u-4#G~;7$&Jbpa$xI`KOpl>llvt(HhNQL3$UeL5(268+eXrhq2^W5Zd3j z(XL&ALhdAU4kpG4NvQ4aO0*}+uwOrF=ub)io@NUAd}ZHf(wW9O&W&5OrmMIx=`r1p zZzR_JGbhy5Owf^55~)*{GLaVG7{De{w*!6!Xs%6}@@!aWYx$@y_)(fG z&0Kfju~0rp^N_;Alxvwgkp4?W8(n)Et6ayJP(mn4<9Mj)H!zI6F4QepK9Ckjvq0CT zNQ;Z#6q%alLNlwNd8p8ANO!^ai5$L;TNR2l9zSuqXQph;KK%ytrz$X2?akVM3Ray> zQwMkrA43{3RT@!L_uu&H3e|Y`ZLb7gp*MU5L!jAkQn6?-r>M^Lx%E|K1PJc;L=G@o z3v_V!CX!tlqnKI1H7MT|Xjf?yQV5`(aA>g?qpJ3XS3lQsCJjM`z^DY{)iB_wO-Y?TRL5x^_euBH#xbRmX6F`*ey<2lKg0MA1ivgE{u(jG;jIq%Z&q!)$L zge%HxIj<%g!9}{4W^>g*9|UkI8DA3C%_S51wX{TWGr4hU*LYLqOs;EMh4xn^y!;^9 zT4xL;3?(yiw-Wyv(3gD&Wfu&!LgU$>Xelo_(9(q9r2`aW2dD5c0p3fHyYm2Gs{u$%6Q2u(?Z)h=3a7-YisH*&HJ9v z+;C9fRq|k1>3w$!r1^K80n_Z*IfQ-})HXIE>{-3#X5fAwO3h~rTzQ3eFPYZ;CE$in z%IazKWB(f4Q5q1fYQyUoLi40$HX;nE>x2m$2&Wu0W3~(MHMF~weS=s9rih6gHxDPd zFl-C7`((7^yO(zg9wZ3AFKOZ=x7`}Y)Y3c>>?75>7izn~j+^13u_1gQmXZk!Hbqaj zm;I9tsA??(7*VMKY5>6^&bM8qHFDp%_|--A8F?$KO9ZwFqAA(uGp6J^I{HM zTcL@5^rPxNPfs63t^=-IjW4Kc>Py;oInPy>v}r@ZJ?`W;3qyBKV;BN?RlI`B&{k-c zRh9p>yDG|_si w_wbRj3~BZo=U&{Y3{9^ZL)S??k9L~oKN1+%C_5Qi#Q*>R07*qoM6N<$g8Fzf6951J literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (5).png" "b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (5).png" new file mode 100644 index 0000000000000000000000000000000000000000..b21190fe8d451d0705a4890c23937104e35283a9 GIT binary patch literal 3466 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 literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (6).png" "b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270 (6).png" new file mode 100644 index 0000000000000000000000000000000000000000..4d46ffcd3aa9f632f0ee934eb6c88c859f5b5a2d GIT binary patch literal 5247 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 FV1nZ571sa& literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/Contents.json new file mode 100644 index 0000000..f748a9b --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "라고 할때 살걸_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "라고 할때 살걸_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "라고 할때 살걸_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270_1x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/icon_vertical.imageset/\353\235\274\352\263\240 \355\225\240\353\225\214 \354\202\264\352\261\270_1x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c23157950610ee3fb67e14eb687633a6d07c2e8f GIT binary patch literal 1735 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 TXCj4)00000NkvXXu0mjfkhy>S literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/profile.imageset/Group 105_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/profile.imageset/Group 105_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee58bd2009e60b1370c61472b867ad58b804d06 GIT binary patch literal 4623 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 FV1ngSnKl3b literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/iconImage/profile.imageset/Group 105_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/iconImage/profile.imageset/Group 105_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c798d2d5066060fc96fb5ec814b5b4589dc574eb GIT binary patch literal 6803 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 =LLp z_{A}4xVB2ifAis+FY&>b^i`)N7%6bVh|9n^mwf&S;nv#Kvr{q{o+MsqPJV}WF-PR= zV?eZ3E~3SXzZ-iawaZe|Z|U7n6J(K|UW5J4y;)a%ivjXd4762)F<(T2UHc`$V6eCs zARef|qShALOY?Oc^CZjBoB|E>>4igpT&Ac z9z&Wq+?$9EE|^Y!TS$Gnxa|)G!UY)CUwhW`TE}uH2|(+I0aNR7b|qHV5B2HYx)sTl zFy--<80hoXJ3SNS&lfj3;@yjg{?5Zf%)5E;<8~_nYlS?S@>s8rJ5ddImKU75zi(N$ z1BR1ke5FebMmXy#ZXEc>0PzE9y<1N(VF63ssZtD|_OFE964Ft1pa7V4o9JZCd>Bq} z^&%I>#lAt=Zi~BuE2Y;Cb5?E%Y@}?9F^+ zgt@evl&j(tdl^{5W*G;;8G~I*c|l<*gPLqlQQ^;qUV|Rv45fk#9r|%?mTx1AyvpV5 z=E}NhVW)>+V;~pvPR>NXul~wD$&ra6szY-$8I%NdsJpYPa#lQ4bh*c*io;iMs|H&6 z-v=GPlV^GK2wpq6ATyY zXfVzGUAVsfxh5g9&*#4Q#!OwHLEMMHG5L<`T#Jwj!&ne)FWbHLTpxB?7?rX-b}@2R z{4w$ePlyIH%kiKXjac+Vsvbx3bCzR1S>|z&Un4Ei$jow&n%D)`Q;rUvZzY9Q!yE5P z!y~`xKE5_K({f*qb%QSQ;Rf?rk0LM@>-F#=Cb1t(gwjYkj<&Sj6tS96C97Bz<-zxR zTD;N6jtOwf#)A2;F0{~ji071wgVRj6en;T(OAM@D@?4srKS-nKxg{Q4kjdigr zU;mX@u-Mr9e~IVA$t>4RCk~~ig|B6{(Jxoant#SUT@}j+I@)y1p-0+Q`XXtefp)tk zE*6Y4*>c5sb%$1S{=6i?uws1!I!*rKNVy%mzlU*a5^UWH+8q0il9m4qBw`Jx>4S2t z*u~#l?;Y9I-n(7eq9Xf|J@D(drYE#({-Y36oxukmTP@`3_>CS%nNYh|zn^1Ir?sh31|J~h#WSa*qDu#(|r^ze)XBXe}=;@c??*}d+^s|_Qz$C zTUzM<aFk@q_JrM!R#u%0;XzB)QA&l@WSQ1tVf%OI`+ zTp}psMf7y&S(BgFVjU!4R~0>#I4EBI{&K}j$NINtzXZ~*nm9mDn?a1s$E3CcFTOBO_JX1bG0I(vH=sj zX4=oTxw)YU@1Q%=JXZ$g1hN&z-7IPM=86JZVnCecn8n?v<38(K&hKsGlQW;@&&^eT nhHgB6u9TOT|NH{@$1Y6?HJLgKjj%oYLjo8Z+}5v!xkmpVJ8)rM literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/line/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/line/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/line/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Contents.json new file mode 100644 index 0000000..ce4221a --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Line 25_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Line 25_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Line 25_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Line 25_1x.png b/LGHTSG/LGHTSG/Assets.xcassets/line/line.imageset/Line 25_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..e893a38ff2360bdf3566c40cfc63bd5308810478 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0y~yU~~bp89CU1PTNkEFTz$3DlfkDv%gc)6@872S) z8Hxf{omZH>z4~I nVAYQX$}$}02NDT_X+Y9K#Agc&Q)uJjN|1!7tDnm{r-UW|JuV{6 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/login/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/login/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/login/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/Contents.json new file mode 100644 index 0000000..f8b33e6 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "kakao_login_large_wide_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "kakao_login_large_wide_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "kakao_login_large_wide_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_1x.png b/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4320b2a36d44ca09af85b9fcb87b6deb4dc1b57d GIT binary patch literal 2843 zcmV+$3*_{PP)VPAORXcZnV%SAT2=)h?D{?DD6XDDI%u|RLd#U0|CK{)@rEF2LdynK-AsCjQ8U=s@DP zf>!cqLl!}XVHyi0dDtWA@mnb!1riCN0hh6f9`nF34ATf9uW>t?Vu%Wb7*8762Moh7 zjTA~1_7z$v`7U8Ut@i@MFihj-fQs^lIbaxuY2*kk6ds}vf#M3oFiayx78PX{Lxy1( z(n4;rVHk!9z=Fsy3=@C_kzp7n01G0+FiZdzM22CQ04#_M!!Q9f_#TjDz-9-^Y=GBG ziw{t%0fP>Rj|a5h%eyiR!$d|@rOE99&YS~2+yWds0i3@G6cqz57hp61>8U_=OQ3Hq zFeDF1OJ#9n7^eOpMykk&0>xG!e=V@`UBK?R_4ZlKfX9Cgj2X_N7z@a<1RH&>dM({W zHQ`?}O0?jRprg-NtBuN~R<99fXtSxH)5&yQH~jN$XsG8ujRlC1vtN_2O#wFk3-EZt zv$2){JN5ua$deq`DBEObM)k` zt$zJFx>XXW-3RnIbX*r|*JzUJ#o#;#k`sN(x_FC!d~C$4bk5hVtCZZh(I8{#91HsN za)OC{A`(O)Xsgx%|2>0<*!Br6yZoM_#Hv^)bZ+m)oz1Iyet+Fyg43ymDulNtyuPfa zRYmKg9R?gbsSWvAnu}GKvosNAiwdvIwcxHCH*}<{ZratwLJjiQnefQu6s&o}jEoSX z_>+5``1iW+YJ6SnYvv0{idR<|;fbnLHLK{^uQk}X&4Av$T;+ne`+yEFzMg<7<4Vyl z*Fone;ovbHraza2KQFf6?#?WVu}(ySc$u!lUHkl12rK%eS~ z-w!sMa7Pm_g|9UWhY+Nj`Dllc>^w>y&FK!ViUnsh*tK7e4ewk>+g4SDI4#+Q-#y{Q zq}eHyhB4qbqigmw6BB$PuNfhHMt$|;@88=&OU-r%j_7f6iIzmV!glS3I6Tconbp*cV!aLcIR&2XV?V z2g5>P`PHJ@CnQBKTrE{CjGVim#{Id@YQ>VA)?WPQs3z?EIa7a$NDxI~q|A<}P;8-# z&uT_>?*?!ThWM@~w;qr@O znO&k>aCN(rr?l9z(})(C9&~KyRs^qz!e+6grBqilAEf6x^w_qwE$h{h?x6xfuuw*bwIpHM%O_8ON6~E-%G%u z&vjTzU-HTY6>-CwJIzYPuZnzQw~iHde_0=|*lk~TwVK_ev85RE^NR4hd8QZnON+2@ zc_Ml}oPm4qb}52ZY?UYs)*;U1qu0$fw(3--n8MW~2i{AEc1$ODMnme7lIS zWb{zc9s#Bfu{$KJ-)N$uh#o5z6o(X;o9#A#Y(V~6lVX>W6rNq{mL9Bp!HiR1X|eY+ z9o~E|9%F{t=vuI#4Ha6#33J7J2@iEGRm4T_qNP-#{b_Iyg}0SOIrknX31TV26Ky`Tp0JW#5)}f&zXOZmimR3tg|)4i)v0So?njJOqE^>UNdkI=2zxae zk$({(4)Eh#e-m~B_Z-#>gx7T64{JZlLfDCxmfA9s!s3$BV7-CC+ZDv55QZSl)k7X| zz!Rj+Wx}IDcT=9*T=~4YR_Ps85NB`?qMvl-z;UTV}g@0k2VVK5?440yXvJ3+*V-r2*fngY?5h6+0j;0u* zqJP9JmQ!i@6kK3o7^V?H`sbr%D|DDDw6J_$8u<#c;l)JCEDoU6)+CK$B6n`fVHl=C tA^Cr;!bbX5D9QLcY29m53tSYh{SW*Qs<@;W<1qjL002ovPDHLkV1ge9K70TG literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_2x.png b/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c3a02511597a56cb6ec5cccce3342fe14fbadb5e GIT binary patch literal 6496 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/login/kakaoLogin.imageset/kakao_login_large_wide_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..24ef3e681371c6c060e7eb507db33ea620a7c941 GIT binary patch literal 10924 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 AYybcN literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/login/login-btn.imageset/Group 130_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/login/login-btn.imageset/Group 130_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca21760b95d768d580da23bc10cd770028497ad GIT binary patch literal 2676 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 HoD!MwTqe8QXoqa?;#G5&Kiv~YGq!^ zTRAb6*D}RX3ry5!6=lpVHAEptSyN0?$GgsdKkV22visq^opYY|oadbL`<L9(SMm=r$5R zpQRs*P7A6M&5d^E&QpJ#jXRDz%=?ZS&Lz@ekV?((3?UdBehF2Gc$^& z=>3qMks6^GAw4q?U{S%edxMv~5>GytmDJyH*a8Q9d=!mFTN--FdF0xJ4K9=V=P%TG zRV_K0S5{W$q}SOQ@1%vZIXvD*JOH*L$i<$6?e`zW6kw<4Z+x*UC}({bekrYGp3rni zZEKVC=gdfZ3zWsFyGE@zT(Yn0rMlvnESBboIk)3m2Yj%pBLbYartSS&&mfq#ozTGB zST7xmo3mAzUzKM<(fs{R{&e8ZB$}l94v!nLBGQ3GXDqEmyEuiH8C7B00nQBo44;+< zoX)@+^Zxb1@M8PWP!V4rRF}Br9Gy&n1K_3))$t6148Q@n1pwP%Mu7h#Wa09i3j&l_ zn8Sg$5gG;_|Bq&)UNDKLDe8u@XI2=FgxTuCEhNTa{r(;N#3Rk~N*27@RJV zZf5Ctn9J(&wSjdP6V{@xJ;V*uCv+u0*`?@vo=SUIL5OIZXWuG~S*u^nm(Nz?`WRNl zY?EQ`m?GjNBRO#S-O0|0W%l5?Z;I=tPH8jo=ss^hr&4dk$5V6>~W0T4am@Y1d=0K=`Ni&dpq1iZ0No=RQT`{ zQXM07-yaqB9$F$}_-d&@QjSJne-b{d#Q$`#p+lOHJeE|D9aFU|;|9DUJ8_krHA6PC zR~SrjTVJ*R&`Ik@<6IyE`{?|MUbCg-Y!XY8a&_bDgjdGE{d2W~Yp{j66~J{1SeB*K^lMr747v(^RO zQicB6FP&z;|L3ROIX!Q3N4~7>RL`|FBGAE|ax;=FOSHo({Zi%y`JYw2Yk4&<@gojA13ngNi-3q# zr`J(;YegTzNYkBPiRWJj$t2}Q=G`wN5Pw9JCZ z=Wo8?V@J%${8`9@UNj|gdP3AF&R#&}x^Y9>>yjkaThXxYJ~R9-=@0K0Fo`-U6!d5K z0sDB7%_29B_n~)!cT-VANLc>_&I2erN3}kOHHS5~NBb*G3&qM>ece9yY@e%$#@YF>a1m@e9mz;w_)NnqH6 z2naxK=)B|Bc1}itM`>wBBgT$B$Pasyy%R zRYdSR+^%L_>kq#-R$cJN3>$#ztc=V|o}r+Ssu33w*uhl0L+d60SU>IhY-O*eYMN8^ z)>c{BnwPb;wLe4T_JF`$UDOcbYPO(IsO3VXQdx@gNbcc^*%x?75VBrTUY|TCr?^i-BP+H{ z_U-;EQ~L2itTw8<@d2XMuEsIy!2Vv&O#o&udcXTdHnL*p_nYhlR;==66(Sz{B$`%1 P6AVzkqmnCKLsI?%I$0J% literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/login/login-btn2.imageset/\353\241\234\352\267\270\354\235\270 Btn_3x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/login/login-btn2.imageset/\353\241\234\352\267\270\354\235\270 Btn_3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..391e5ec8688c415c1f5f5e57dc8c108a37af42fb GIT binary patch literal 2797 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/navigation/back-arrow.imageset/Vector_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/navigation/back-arrow.imageset/Vector_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3772a3f48a968eb6dff5773090b060954ed5fb18 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^5?0}%)&C@5}%6wSDG1-Rm!vf{?DG`z<-ZHwzb`!_dg6brv2&zV`T%6D%=q8c) Bool { + return true + } + } diff --git a/LGHTSG/LGHTSG/Controller/Authentication/RegisterationController.swift b/LGHTSG/LGHTSG/Controller/Authentication/RegisterationController.swift index fd143e3..b52cf97 100644 --- a/LGHTSG/LGHTSG/Controller/Authentication/RegisterationController.swift +++ b/LGHTSG/LGHTSG/Controller/Authentication/RegisterationController.swift @@ -9,10 +9,161 @@ import UIKit class RegisterationController: UIViewController { + + + var profileImageView : UIImageView = { + let image = UIImageView() + image.layer.cornerRadius = image.frame.height/2 + image.layer.borderWidth = 1 + image.layer.masksToBounds = true + image.contentMode = .scaleToFill + image.layer.borderColor = UIColor.clear.cgColor // 원형 이미지의 테두리 제거 + image.clipsToBounds = true + image.image = UIImage(named: "profile") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + // MARK: imagePicker + var profileImagePicker = UIImagePickerController() + + + // MARK: https://mansu.tistory.com/120 override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. + let RegisterView = RegisterView() + + view.backgroundColor = .black + view.addSubview(profileImageView) + view.addSubview(RegisterView) + + let tap = UITapGestureRecognizer(target: self, action: #selector(changeProfile)) + profileImageView.addGestureRecognizer(tap) + profileImageView.isUserInteractionEnabled = true + + + + // MARK: profile 위치 설정 + self.profileImageView.snp.makeConstraints{ + $0.top.equalToSuperview().offset(120) + $0.centerX.equalToSuperview() + } + + profileImageView.snp.makeConstraints { make in + make.height.equalTo(100) + make.width.equalTo(100) + } + + RegisterView.translatesAutoresizingMaskIntoConstraints = false + RegisterView.topAnchor.constraint(equalTo: profileImageView.bottomAnchor).isActive = true + RegisterView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + RegisterView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + RegisterView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + // MARK: 키보드 올라갔을 때 화면 터치해서 내려가게함 + let tapGesture = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:))) + self.view.addGestureRecognizer(tapGesture) + // MARK: 키보드가 화면을 가릴 때 화면을 위로 올릴 수 있도록 + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(sender:)), name: UIResponder.keyboardWillShowNotification, object: nil); + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(sender:)), name: UIResponder.keyboardWillHideNotification, object: nil); + + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(RegisterView.navigationBar2) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + RegisterView.navigationBar2.tintColor = UIColor.white + RegisterView.navigationBar2.standardAppearance = navigationAppearance + RegisterView.navigationBar2.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + RegisterView.navigationBar2.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + RegisterView.navigationBar2.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + let navItem = UINavigationItem(title: "회원가입") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + + RegisterView.navigationBar2.setItems([navItem], animated: true) + + + // MARK: 화면 전환이나 실행함수 + RegisterView.nextBtn.addTarget(self, action: #selector(nextBtnClicked), for: .touchUpInside) + } + + + + @objc func nextBtnClicked(){ + let success = UserDefaults.standard.bool(forKey: "success") + if success == true { + self.present(RegisterationSuccessController(), animated: true) + UserDefaults.standard.removeObject(forKey: "success") + } + else { + print("아직 회원가입 안됨") + } } + + @objc func tapDismissButton(){ + self.presentingViewController?.dismiss(animated: true) + UserDefaults.standard.removeObject(forKey: "allcheck") + UserDefaults.standard.removeObject(forKey: "check1") + UserDefaults.standard.removeObject(forKey: "check2") + UserDefaults.standard.removeObject(forKey: "check3") + + + } + + + // 키보드때문에 화면이 가려질 경우 화면을 올린다 + @objc func keyboardWillShow(sender: NSNotification) { + self.view.frame.origin.y = -180 // Move view 150 points upward + } + + @objc func keyboardWillHide(sender: NSNotification) { + self.view.frame.origin.y = 0 // Move view to original position + } + + + // MARK: 프로필 설정 + @objc func changeProfile(){ + profileImagePicker.sourceType = .photoLibrary + profileImagePicker.allowsEditing = false + profileImagePicker.delegate = self + present(profileImagePicker, animated: true) + } + + + func tapImage(imageView: UIImageView){ + var tap = UITapGestureRecognizer() + if imageView == profileImageView { + print("프로필 설정") + tap = UITapGestureRecognizer(target: self, action: #selector(changeProfile)) + } + imageView.addGestureRecognizer(tap) + imageView.isUserInteractionEnabled = true + } + +} + + +extension RegisterationController: UIImagePickerControllerDelegate, UINavigationControllerDelegate{ + + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { + + if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { + self.profileImageView.image = image + self.profileImageView.layer.cornerRadius = profileImageView.frame.height/2 + self.profileImageView.contentMode = .scaleToFill + self.profileImageView.clipsToBounds = true + self.profileImageView.layer.borderColor = UIColor.clear.cgColor // 원형 이미지의 테두리 제거 + } + dismiss(animated: true, completion: nil) + + } } diff --git a/LGHTSG/LGHTSG/Controller/Authentication/RegisterationSuccessController.swift b/LGHTSG/LGHTSG/Controller/Authentication/RegisterationSuccessController.swift new file mode 100644 index 0000000..ab4e2bf --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/Authentication/RegisterationSuccessController.swift @@ -0,0 +1,27 @@ +// +// RegisterationSuccessController.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/28. +// + +import UIKit + +class RegisterationSuccessController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .black + let JoinSuccessView = JoinSuccessView() + + view.addSubview(JoinSuccessView) + JoinSuccessView.translatesAutoresizingMaskIntoConstraints = false + JoinSuccessView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + JoinSuccessView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + JoinSuccessView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + JoinSuccessView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + } + + +} diff --git a/LGHTSG/LGHTSG/Controller/CheckController/CheckAgreeController.swift b/LGHTSG/LGHTSG/Controller/CheckController/CheckAgreeController.swift new file mode 100644 index 0000000..17da51f --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/CheckController/CheckAgreeController.swift @@ -0,0 +1,104 @@ +// +// CheckAgreeController.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import UIKit + +class CheckAgreeController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .black + let CheckAgreeView = CheckAgreeView() + view.addSubview(CheckAgreeView) + + UserDefaults.standard.set(false, forKey: "allcheck") + UserDefaults.standard.set(false, forKey: "check1") + UserDefaults.standard.set(false, forKey: "check2") + UserDefaults.standard.set(false, forKey: "check3") + + CheckAgreeView.translatesAutoresizingMaskIntoConstraints = false + CheckAgreeView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + CheckAgreeView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + CheckAgreeView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + CheckAgreeView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(CheckAgreeView.navigationBar3) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + CheckAgreeView.navigationBar3.tintColor = UIColor.white + CheckAgreeView.navigationBar3.standardAppearance = navigationAppearance + CheckAgreeView.navigationBar3.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + CheckAgreeView.navigationBar3.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + CheckAgreeView.navigationBar3.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + let navItem = UINavigationItem(title: "회원가입") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + + CheckAgreeView.navigationBar3.setItems([navItem], animated: true) + CheckAgreeView.agreeBtn1.addTarget(self, action: #selector(agreeBtn1Clicked), for: .touchUpInside) + CheckAgreeView.agreeBtn2.addTarget(self, action: #selector(agreeBtn2Clicked), for: .touchUpInside) + CheckAgreeView.agreeBtn3.addTarget(self, action: #selector(agreeBtn3Clicked), for: .touchUpInside) + CheckAgreeView.nextBtn2.addTarget(self, action: #selector(nextBtnClicked2), for: .touchUpInside) + + } + + @objc func tapDismissButton(){ + self.presentingViewController?.dismiss(animated: true) + } + + @objc func agreeBtn1Clicked(){ + self.present(CheckPageServiceController(), animated: true) + } + + @objc func agreeBtn2Clicked(){ + self.present(CheckPagePrivacyController(), animated: true) + } + + @objc func agreeBtn3Clicked(){ + self.present(CheckPageMarketingController(), animated: true) + } + + @objc func nextBtnClicked2(){ + + // MARK: 체크여부 돌아오는지 + var allCheck : String = "" + allCheck = UserDefaults.standard.string(forKey: "allcheck") ?? "0" + var isChecked2 : String = "" + isChecked2 = UserDefaults.standard.string(forKey: "check1") ?? "0" + var isChecked3 : String = "" + isChecked3 = UserDefaults.standard.string(forKey: "check2") ?? "0" + var isChecked4 : String = "" + isChecked4 = UserDefaults.standard.string(forKey: "check3") ?? "0" + + print("allCheck:\(allCheck), isChecked2:\(isChecked2), isChecked3:\(isChecked3), isChecked4:\(isChecked4)") + + var allChecked = Int(allCheck) + var isCheck2 = Int(isChecked2) + var isCheck3 = Int(isChecked3) + var isCheck4 = Int(isChecked4) + + if allChecked == 1{ + self.present(RegisterationController(), animated: true) + } + else if isCheck2 == 1 && isCheck3 == 1 && isCheck4 == 1{ + self.present(RegisterationController(), animated: true) + } + else{ + print("체크안된게 있음") + } + + + } + +} diff --git a/LGHTSG/LGHTSG/Controller/CheckController/CheckPageMarketingController.swift b/LGHTSG/LGHTSG/Controller/CheckController/CheckPageMarketingController.swift new file mode 100644 index 0000000..5e46019 --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/CheckController/CheckPageMarketingController.swift @@ -0,0 +1,52 @@ +// +// CheckPageMarketingController.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import UIKit + +class CheckPageMarketingController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + let CheckPageMarketingView = CheckPageMarketingView() + view.backgroundColor = .black + view.addSubview(CheckPageMarketingView) + + CheckPageMarketingView.translatesAutoresizingMaskIntoConstraints = false + CheckPageMarketingView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + CheckPageMarketingView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + CheckPageMarketingView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + CheckPageMarketingView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(CheckPageMarketingView.navigationBar6) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + CheckPageMarketingView.navigationBar6.tintColor = UIColor.white + CheckPageMarketingView.navigationBar6.standardAppearance = navigationAppearance + CheckPageMarketingView.navigationBar6.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + CheckPageMarketingView.navigationBar6.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + CheckPageMarketingView.navigationBar6.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + let navItem = UINavigationItem(title: "마케팅 정보 수신 동의") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + + CheckPageMarketingView.navigationBar6.setItems([navItem], animated: true) + CheckPageMarketingView.nextLabel5.addTarget(self, action: #selector(tapDismissButton), for: .touchUpInside) + + } + + @objc func tapDismissButton(){ + self.presentingViewController?.dismiss(animated: true) + } + +} diff --git a/LGHTSG/LGHTSG/Controller/CheckController/CheckPagePrivacyController.swift b/LGHTSG/LGHTSG/Controller/CheckController/CheckPagePrivacyController.swift new file mode 100644 index 0000000..b8b9a31 --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/CheckController/CheckPagePrivacyController.swift @@ -0,0 +1,53 @@ +// +// CheckPagePrivacyController.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import UIKit + +class CheckPagePrivacyController: UIViewController { + + override func viewDidLoad() { + + super.viewDidLoad() + let CheckPagePrivacyView = CheckPagePrivacyView() + view.backgroundColor = .black + view.addSubview(CheckPagePrivacyView) + + CheckPagePrivacyView.translatesAutoresizingMaskIntoConstraints = false + CheckPagePrivacyView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + CheckPagePrivacyView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + CheckPagePrivacyView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + CheckPagePrivacyView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(CheckPagePrivacyView.navigationBar5) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + CheckPagePrivacyView.navigationBar5.tintColor = UIColor.white + CheckPagePrivacyView.navigationBar5.standardAppearance = navigationAppearance + CheckPagePrivacyView.navigationBar5.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + CheckPagePrivacyView.navigationBar5.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + CheckPagePrivacyView.navigationBar5.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + let navItem = UINavigationItem(title: "개인정보 처리방침") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + CheckPagePrivacyView.navigationBar5.setItems([navItem], animated: true) + CheckPagePrivacyView.nextLabel4.addTarget(self, action: #selector(tapDismissButton), for: .touchUpInside) + + } + + @objc func tapDismissButton(){ + self.presentingViewController?.dismiss(animated: true) + } + + +} diff --git a/LGHTSG/LGHTSG/Controller/CheckController/CheckPageServiceController.swift b/LGHTSG/LGHTSG/Controller/CheckController/CheckPageServiceController.swift new file mode 100644 index 0000000..e626d81 --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/CheckController/CheckPageServiceController.swift @@ -0,0 +1,54 @@ +// +// CheckPageServiceController.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import UIKit + +class CheckPageServiceController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + let CheckPageServiceView = CheckPageServiceView() + view.backgroundColor = .black + view.addSubview(CheckPageServiceView) + + CheckPageServiceView.translatesAutoresizingMaskIntoConstraints = false + CheckPageServiceView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + CheckPageServiceView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + CheckPageServiceView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + CheckPageServiceView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(CheckPageServiceView.navigationBar4) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + CheckPageServiceView.navigationBar4.tintColor = UIColor.white + CheckPageServiceView.navigationBar4.standardAppearance = navigationAppearance + CheckPageServiceView.navigationBar4.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + CheckPageServiceView.navigationBar4.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + CheckPageServiceView.navigationBar4.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + let navItem = UINavigationItem(title: "서비스 이용약관") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + + CheckPageServiceView.navigationBar4.setItems([navItem], animated: true) + CheckPageServiceView.nextLabel3.addTarget(self, action: #selector(tapDismissButton), for: .touchUpInside) + } + + @objc func tapDismissButton(){ + self.presentingViewController?.dismiss(animated: true) + } + + + +} diff --git a/LGHTSG/LGHTSG/Controller/FindPassWordController.swift b/LGHTSG/LGHTSG/Controller/FindPassWordController.swift new file mode 100644 index 0000000..83c9c58 --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/FindPassWordController.swift @@ -0,0 +1,56 @@ +import UIKit + +class FindPassWordController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + let FindPwView = FindPwView() + self.view.addSubview(FindPwView) + view.backgroundColor = .black + + + FindPwView.translatesAutoresizingMaskIntoConstraints = false + FindPwView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + FindPwView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + FindPwView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + FindPwView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(FindPwView.navigationBar) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + FindPwView.navigationBar.tintColor = UIColor.white + FindPwView.navigationBar.standardAppearance = navigationAppearance + FindPwView.navigationBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + FindPwView.navigationBar.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + FindPwView.navigationBar.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + let navItem = UINavigationItem(title: "비밀번호 찾기") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + + FindPwView.navigationBar.setItems([navItem], animated: true) + + // MARK: 키보드 올라갔을 때 화면 터치해서 내려가게함 + let tapGesture = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:))) + self.view.addGestureRecognizer(tapGesture) + } + + @objc func tapDismissButton(){ + var userId = UserDefaults.standard.string(forKey: "id") + var pw = UserDefaults.standard.string(forKey: "pw") + + print("id : \(userId), pw : \(pw)") + self.presentingViewController?.dismiss(animated: true) + } + + + + +} diff --git a/LGHTSG/LGHTSG/Controller/MyPageController.swift b/LGHTSG/LGHTSG/Controller/MyPageController.swift new file mode 100644 index 0000000..d726f15 --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/MyPageController.swift @@ -0,0 +1,49 @@ +// +// MyPageController.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/26. +// + +import UIKit + +class MyPageController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + let MyPageView = MyPageView() + view.addSubview(MyPageView) + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(MyPageView.navigationBar7) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + MyPageView.navigationBar7.tintColor = UIColor.white + MyPageView.navigationBar7.standardAppearance = navigationAppearance + MyPageView.navigationBar7.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + MyPageView.navigationBar7.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + MyPageView.navigationBar7.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + let navItem = UINavigationItem(title: "마이페이지") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + + //MyPageView.navigationBar2.setItems([navItem], animated: true) + + + // MARK: 화면 전환이나 실행함수 + //MyPageView.nextBtn.addTarget(self, action: #selector(nextBtnClicked), for: .touchUpInside) + + } + + @objc func tapDismissButton(){ + self.presentingViewController?.dismiss(animated: true) + + } + +} diff --git a/LGHTSG/LGHTSG/Controller/ViewController.swift b/LGHTSG/LGHTSG/Controller/ViewController.swift new file mode 100644 index 0000000..a70d89a --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/ViewController.swift @@ -0,0 +1,55 @@ +// +// ViewController.swift +// LGHTSG +// +// Created by HA on 2023/01/09. +// + +import UIKit + +class ViewController: UIViewController { + + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .black + + + let StartView = StartView() + self.view.addSubview(StartView) + + + StartView.translatesAutoresizingMaskIntoConstraints = false + StartView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + StartView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + StartView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + StartView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + StartView.loginBtn.addTarget(self, action: #selector(loginBtnClicked), for: .touchUpInside) + StartView.joinBtn.addTarget(self, action: #selector(joinBtnClicked), for: .touchUpInside) + StartView.findPwBtn.addTarget(self, action: #selector(findPwBtnClicked), for: .touchUpInside) + } + + @objc func loginBtnClicked() { + let vc = LoginController() + vc.modalPresentationStyle = .overCurrentContext + self.present(vc, animated: true) + } + + @objc func joinBtnClicked() { + let vc = CheckAgreeController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + @objc func findPwBtnClicked(){ + let vc = FindPassWordController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + + +} + diff --git a/LGHTSG/LGHTSG/Info.plist b/LGHTSG/LGHTSG/Info.plist index 0eb786d..79ded2a 100644 --- a/LGHTSG/LGHTSG/Info.plist +++ b/LGHTSG/LGHTSG/Info.plist @@ -2,6 +2,16 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UIAppFonts + + NanumSquareB.ttf + NanumSquareR.ttf + UIApplicationSceneManifest UIApplicationSupportsMultipleScenes diff --git a/LGHTSG/LGHTSG/Model/Login.swift b/LGHTSG/LGHTSG/Model/Login.swift new file mode 100644 index 0000000..b428f9e --- /dev/null +++ b/LGHTSG/LGHTSG/Model/Login.swift @@ -0,0 +1,20 @@ +// +// LoginDataModel.swift +// LGHTSG +// + +import Foundation + +// MARK: - Model +struct Login : Decodable { + let body : body + let header : header + + struct header : Decodable { + let resultCode : Int + } + + struct body : Decodable { + let jwt : String + } +} diff --git a/LGHTSG/LGHTSG/Model/LoginModel.swift b/LGHTSG/LGHTSG/Model/LoginModel.swift new file mode 100644 index 0000000..85ffb9e --- /dev/null +++ b/LGHTSG/LGHTSG/Model/LoginModel.swift @@ -0,0 +1,72 @@ +// +// LoginModel.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import Alamofire + +class LoginModel { + + let url = "http://api.lghtsg.site:8090/users/log-in" + let header : HTTPHeaders = [ + "Content-Type" : "application/json" + ] + + func requestLogin(bodyData : Parameters) { + + // [http 요청 수행 실시] + print("") + print("====================================") + print("requestLogin() :: Post Body Json 방식 http 요청 실시]") + print("주 소 :: \(url)") + print("데이터 :: \(bodyData.description) ") + print("====================================") + print("") + + + AF.request( + url, // [주소] + method: .post, // [전송 타입] + parameters: bodyData, // [전송 데이터] + encoding: JSONEncoding.default, // [인코딩 스타일] + headers: header // [헤더 지정] + ) + .validate(statusCode: 200..<512) + .responseData { response in + switch response.result { + case .success(let res): + do { + print("") + print("====================================") + print("응답 코드 :: \(response.response?.statusCode ?? 0)") + print("응답 데이터 :: \(String(data: res, encoding: .utf8) ?? "")") + print("====================================") + print("") + } + catch (let err){ + print("") + print("====================================") + print("-------------------------------") + print("catch :: ", err.localizedDescription) + print("====================================") + print("") + } + break + case .failure(let err): + print("") + print("====================================") + print("-------------------------------") + print("응답 코드 :: \(response.response?.statusCode ?? 0)") + print("-------------------------------") + print("에 러 :: \(err.localizedDescription)") + print("====================================") + print("") + break + } + } + + } +} diff --git a/LGHTSG/LGHTSG/Model/LoginResultModel.swift b/LGHTSG/LGHTSG/Model/LoginResultModel.swift new file mode 100644 index 0000000..3ab5226 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/LoginResultModel.swift @@ -0,0 +1,16 @@ +// +// LoginResultModel.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/26. +// + +import Foundation +class LoginResult { + + var jwt : String + + init(jwt: String) { + self.jwt = jwt + } +} diff --git a/LGHTSG/LGHTSG/Model/changePw.swift b/LGHTSG/LGHTSG/Model/changePw.swift new file mode 100644 index 0000000..c3cab47 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/changePw.swift @@ -0,0 +1,17 @@ +// +// changePw.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/31. +// + +import Foundation + +struct changePw : Decodable { + + var body : String + + init(body: String) { + self.body = body + } +} diff --git a/LGHTSG/LGHTSG/Model/email.swift b/LGHTSG/LGHTSG/Model/email.swift new file mode 100644 index 0000000..b4256f2 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/email.swift @@ -0,0 +1,17 @@ +// +// email.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/27. +// + +// MARK: - Model +struct email : Decodable { + + let body : String + + struct header : Decodable { + let resultCode : Int + } + +} diff --git a/LGHTSG/LGHTSG/Model/emailCheckModel.swift b/LGHTSG/LGHTSG/Model/emailCheckModel.swift new file mode 100644 index 0000000..0c8e8f5 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/emailCheckModel.swift @@ -0,0 +1,76 @@ +// +// emailCheckModel.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import Alamofire + +class emailCheck { + + + let url = "http://api.lghtsg.site:8090/users/sign-up/emailCheck" + let header : HTTPHeaders = [ + "Content-Type" : "application/json" + ] + + func requestCode(bodyData : Parameters) { + + // [http 요청 수행 실시] + print("") + print("====================================") + print("requestLogin() :: Post Body Json 방식 http 요청 실시]") + print("-------------------------------") + print("주 소 :: \(url)") + print("-------------------------------") + print("데이터 :: \(bodyData.description) ") + print("====================================") + print("") + + + AF.request( + url, // [주소] + method: .post, // [전송 타입] + parameters: bodyData, // [전송 데이터] + encoding: JSONEncoding.default, // [인코딩 스타일] + headers: header // [헤더 지정] + ) + .validate(statusCode: 200..<4015) + .responseData { response in + switch response.result { + case .success(let res): + do { + print("") + print("====================================") + print("응답 코드 :: \(response.response?.statusCode ?? 0)") + print("-------------------------------") + print("응답 데이터 :: \(String(data: res, encoding: .utf8) ?? "")") + print("====================================") + print("") + } + catch (let err){ + print("") + print("====================================") + print("-------------------------------") + print("catch :: ", err.localizedDescription) + print("====================================") + print("") + } + break + case .failure(let err): + print("") + print("====================================") + print("-------------------------------") + print("응답 코드 :: \(response.response?.statusCode ?? 0)") + print("-------------------------------") + print("에 러 :: \(err.localizedDescription)") + print("====================================") + print("") + break + } + } + + } +} diff --git a/LGHTSG/LGHTSG/Model/join.swift b/LGHTSG/LGHTSG/Model/join.swift new file mode 100644 index 0000000..10be859 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/join.swift @@ -0,0 +1,22 @@ +// +// join.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/28. +// + +import Foundation +// MARK: - Model + +struct join : Decodable { + let body : body + let header : header + + struct header : Decodable { + let resultCode : Int + } + + struct body : Decodable { + let userIdx : Int + } +} diff --git a/LGHTSG/LGHTSG/Model/user.swift b/LGHTSG/LGHTSG/Model/user.swift new file mode 100644 index 0000000..fb5cf22 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/user.swift @@ -0,0 +1,22 @@ +// +// user.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/28. +// + +import Foundation +// MARK: - Model + +struct user : Decodable { + let body : body + let header : header + + struct header : Decodable { + let resultCode : Int + } + + struct body : Decodable { + let userIdx : Int + } +} diff --git a/LGHTSG/LGHTSG/View/FindPwView.swift b/LGHTSG/LGHTSG/View/FindPwView.swift new file mode 100644 index 0000000..26e7b5e --- /dev/null +++ b/LGHTSG/LGHTSG/View/FindPwView.swift @@ -0,0 +1,575 @@ +// +// FindPwView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire + +class FindPwView: UIView { + + + // MARK: 네비게이션 바 생성 + let navigationBar : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + let emailSendImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "send-code-btn") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let emailLabel: UILabel = { + let label = UILabel() + label.text = "인증번호를 요청할 이메일을 입력해주세요." + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 15.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let emailTextField2: UITextField = { + let label = UITextField() + label.becomeFirstResponder() // 첫번째 입력으로 인식 + label.attributedPlaceholder = NSAttributedString(string: "이메일", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + label.leftViewMode = .always + label.becomeFirstResponder() + label.textColor = .white + label.font = UIFont(name: "NanumSquareR", size: 15.0) + label.borderStyle = .none + label.enablesReturnKeyAutomatically = true + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + lazy var emailCodeBtn: UIButton = { + let btn = UIButton() + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 12.0) + //btn.backgroundColor = .red + btn.layer.cornerRadius = 5 + btn.layer.zPosition = 1000 + btn.addTarget(self, action: #selector(emailCodeBtnClicked), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + let codeSendLabel: UILabel = { + let label = UILabel() + label.text = "인증번호가 발송되었습니다" + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .white + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let codeTextField: UITextField = { + let label = UITextField() + label.attributedPlaceholder = NSAttributedString(string: "인증번호", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + label.leftViewMode = .always + label.textColor = .white + label.font = UIFont(name: "NanumSquareR", size: 15.0) + label.borderStyle = .none + label.enablesReturnKeyAutomatically = true + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let codeSendImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "confirm-code-btn") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + + lazy var codeConfirmBtn: UIButton = { + let btn = UIButton() + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 12.0) + //btn.backgroundColor = .blue + btn.layer.cornerRadius = 5 + btn.translatesAutoresizingMaskIntoConstraints = false + btn.addTarget(self, action: #selector(codeConfirmBtnClicked), for: .touchUpInside) + return btn + }() + + + let codeConfirmLabel: UILabel = { + let label = UILabel() + label.text = "인증번호가 일치하지 않습니다." + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .systemRed + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let passwordLabel: UILabel = { + let label = UILabel() + label.text = "변경할 비밀번호를 입력해주세요" + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 15.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + let passwordTextField2: UITextField = { + let password = UITextField() + password.layer.cornerRadius = 5 + password.leftViewMode = .always + password.attributedPlaceholder = NSAttributedString(string: "비밀번호", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + password.borderStyle = .none + password.textColor = .white // 글자색을 흰색으로 + password.isSecureTextEntry = true + password.font = UIFont(name: "NanumSquareR", size: 15.0) + password.resignFirstResponder() + + password.addTarget(self, action: #selector(pwFieldEdited), for: UIControl.Event.editingChanged) + password.translatesAutoresizingMaskIntoConstraints = false + return password + }() + + let pwImageView2: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + + let pwValidLabel: UILabel = { + let label = UILabel() + label.text = "영문, 숫자, 특수문자를 포함한 7자 이상으로 입력해주세요." + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .systemRed + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + + let passwordCheckTextField2: UITextField = { + let password = UITextField() + password.layer.cornerRadius = 5 + password.leftViewMode = .always + password.attributedPlaceholder = NSAttributedString(string: "비밀번호 확인", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + password.borderStyle = .none + password.textColor = .white // 글자색을 흰색으로 + password.isSecureTextEntry = true + password.font = UIFont(name: "NanumSquareR", size: 15.0) + password.resignFirstResponder() + password.addTarget(self, action: #selector(pwFieldEdited), for: UIControl.Event.editingChanged) + password.translatesAutoresizingMaskIntoConstraints = false + return password + }() + + let pwCheckImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + + let pwSameLabel: UILabel = { + let label = UILabel() + label.text = "비밀번호가 일치하지 않습니다." + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .systemRed + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let nextBtnImageView2 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let pwChangeBtn : UIButton = { + let label = UIButton() + label.setTitle("비밀번호 변경하기", for: .normal) + label.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + label.titleLabel?.textColor = .white + label.titleLabel?.textAlignment = .center + label.addTarget(self, action: #selector(changePwBtnClicked), for: .touchUpInside) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + + + let emailCode = emailApiModel() + var code : String = "dklsfjkljdlvnmnxlmnszlksjwr091u3tghjkfnm,gdsajlkfjsclxnm,zbghjkjilekdsfkhglksefmdfbjfo;gsdlfknjbldkgs" + + + // MARK: 인증번호 발송 함수 + @objc func emailCodeBtnClicked(){ + print("인증번호 발송버튼") + guard let email = emailTextField2.text else {return} + + let bodyData : Parameters = [ + "email" : email, + ] + + emailCode.requestEmailDataModel(bodyData: bodyData){ + data in + self.code = data.body + print(self.code) + } + sendCodeheight.isActive = false + } + + + // MARK: 인증번호 확인 함수 + @objc func codeConfirmBtnClicked(){ + if codeTextField.text == self.code { + codeConfirmheight.isActive = true + emailTextField2.isUserInteractionEnabled = false + codeTextField.isUserInteractionEnabled = false + showPwChange() + } + else { + codeConfirmheight.isActive = false + } + } + + // MARK: 패스워드 맞는지 확인하는 함수 + func isSamePassword(_ first: UITextField, _ second: UITextField) -> Bool { + if (first.text == second.text){ + return true + } + return false + } + + // MARK: 패스워드 유효한지 확인 함수 + func isValidPassword(pw: String?) -> Bool{ + + let regex = "^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+=-]).{8,50}" + let predicate = NSPredicate(format: "SELF MATCHES %@", regex) + + if let hasPassword = pw{ + // 길이 확인 + if hasPassword.count > 7 && predicate.evaluate(with: hasPassword){ + print("패스워드 유효") + return true + } + } + return false + } + + + var isCheck1 : Bool = false + var isCheck2 : Bool = false + + // MARK: 패스워드의 결과에 따라 메세지를 보여줄지 여부를 정하는 코드 + @objc func pwFieldEdited(textField: UITextField) { + + if textField == passwordTextField2 { + if isValidPassword(pw: passwordTextField2.text) + { + print("유효함") + pwheight1.isActive = true + isCheck1 = true + } + else{ + print("유효하지않음") + pwheight1.isActive = false + isCheck1 = false + + } + } + + else if textField == passwordCheckTextField2 { + if isSamePassword(passwordTextField2, passwordCheckTextField2) + { + print("같음") + pwheight2.isActive = true + isCheck2 = true + } + else{ + print("다름") + pwheight2.isActive = false + isCheck2 = false + } + } + } + + + let changePw = ChangePwApiModel() + + + @objc func changePwBtnClicked(){ + print("isCheck1=\(isCheck1), isCheck2=\(isCheck2)") + if isCheck1 == true { + if isCheck2 == true { + print("비밀번호 변경 가능") + } + } + + guard let email = emailTextField2.text else {return} + guard let password = passwordTextField2.text else {return} + + + let bodyData : Parameters = [ + "email" : email, + "password" : password + ] + + changePw.requestChangeDataModel(bodyData: bodyData){ + data in + print(data.body) + } + } + + + // MARK: 인증번호 관련 동적 변화 라벨 + var sendCodeheight: NSLayoutConstraint! + var codeConfirmheight: NSLayoutConstraint! + + // MARK: 인증번호가 성공적이면 비밀번호 바꿀 수 있도록 함 + var codeSuccessheight: NSLayoutConstraint! + var codeSuccessheight1: NSLayoutConstraint! + var codeSuccessheight2: NSLayoutConstraint! + var codeSuccessheight3: NSLayoutConstraint! + var codeSuccessheight4: NSLayoutConstraint! + + + // MARK: 비밀번호에 따른 메세지 + var pwheight1: NSLayoutConstraint! + var pwheight2: NSLayoutConstraint! + + + func heightSetting(){ + + sendCodeheight = codeSendLabel.heightAnchor.constraint(equalToConstant: 0) + sendCodeheight.isActive = true + + codeConfirmheight = codeConfirmLabel.heightAnchor.constraint(equalToConstant: 0) + codeConfirmheight.isActive = true + + codeSuccessheight = passwordLabel.heightAnchor.constraint(equalToConstant: 0) + codeSuccessheight.isActive = true + + codeSuccessheight1 = pwImageView2.heightAnchor.constraint(equalToConstant: 0) + codeSuccessheight1.isActive = true + + codeSuccessheight2 = passwordTextField2.heightAnchor.constraint(equalToConstant: 0) + codeSuccessheight2.isActive = true + + codeSuccessheight3 = pwCheckImageView.heightAnchor.constraint(equalToConstant: 0) + codeSuccessheight3.isActive = true + + codeSuccessheight4 = passwordCheckTextField2.heightAnchor.constraint(equalToConstant: 0) + codeSuccessheight4.isActive = true + + pwheight1 = pwValidLabel.heightAnchor.constraint(equalToConstant: 0) + pwheight1.isActive = true + + pwheight2 = pwSameLabel.heightAnchor.constraint(equalToConstant: 0) + pwheight2.isActive = true + } + + + func showPwChange(){ + codeSuccessheight.isActive = false + codeSuccessheight1.isActive = false + codeSuccessheight2.isActive = false + codeSuccessheight3.isActive = false + codeSuccessheight4.isActive = false + } + + func highlightButton(){ + if isCheck1 == true && isCheck2 == true{ + pwChangeBtn.titleLabel?.textColor = .systemBlue + nextBtnImageView2.image = UIImage(named: "text-field") + } + + else{ + pwChangeBtn.titleLabel?.textColor = .white + nextBtnImageView2.image = UIImage(named: "highlight-btn") + } + + } + + + + + + override init(frame: CGRect) { + super.init(frame: frame) + + + heightSetting() + + addSubview(emailLabel) + addSubview(emailSendImageView) + addSubview(emailTextField2) + addSubview(codeSendLabel) + + addSubview(codeSendImageView) + addSubview(codeTextField) + addSubview(codeConfirmLabel) + + + addSubview(passwordLabel) + addSubview(pwImageView2) + addSubview(passwordTextField2) + + + addSubview(pwCheckImageView) + addSubview(passwordCheckTextField2) + addSubview(pwValidLabel) + + addSubview(nextBtnImageView2) + addSubview(pwChangeBtn) + addSubview(pwSameLabel) + + addSubview(emailCodeBtn) + addSubview(codeConfirmBtn) + + addSubview(codeConfirmBtn) + + + + self.emailLabel.snp.makeConstraints { + $0.top.equalToSuperview().offset(140) + $0.left.equalToSuperview().offset(20) + } + + // MARK: 이메일 작성 및 전송 버튼 위치 + self.emailSendImageView.snp.makeConstraints{ + $0.top.equalTo(emailLabel.snp.bottom).offset(30) + $0.centerX.equalToSuperview() + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.emailTextField2.snp.makeConstraints{ + $0.top.equalTo(emailLabel.snp.bottom).offset(45) + $0.left.equalToSuperview().offset(28) + $0.right.equalToSuperview().offset(-120) + } + + self.emailCodeBtn.snp.makeConstraints{ + $0.top.equalTo(emailLabel.snp.bottom).offset(30) + $0.left.equalTo(emailTextField2.snp.right).offset(5) + $0.right.equalTo(emailSendImageView.snp.right) + $0.height.equalTo(emailSendImageView).offset(0) + } + + // MARK: 인증번호 보냈다는 메세지 띄움 + self.codeSendLabel.snp.makeConstraints{ + $0.top.equalTo(emailSendImageView.snp.bottom).offset(5) + $0.left.equalTo(emailSendImageView.snp.left) + } + + + // MARK: 인증번호 작성 및 확인 버튼 위치 + self.codeSendImageView.snp.makeConstraints{ + $0.top.equalTo(emailSendImageView.snp.bottom).offset(30) + $0.centerX.equalToSuperview() + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.codeTextField.snp.makeConstraints{ + $0.top.equalTo(emailSendImageView.snp.bottom).offset(45) + $0.left.equalToSuperview().offset(28) + $0.right.equalToSuperview().offset(-120) + } + + + self.codeConfirmBtn.snp.makeConstraints{ + $0.top.equalTo(emailSendImageView.snp.bottom).offset(30) + $0.left.equalTo(codeTextField.snp.right).offset(5) + $0.height.equalTo(codeSendImageView).offset(0) + $0.right.equalTo(codeSendImageView.snp.right) + } + + + // MARK: 인증번호가 다르다는 메세지를 띄움 + self.codeConfirmLabel.snp.makeConstraints{ + $0.top.equalTo(codeSendImageView.snp.bottom).offset(5) + $0.left.equalTo(codeSendImageView.snp.left) + } + + + // MARK: 비밀번호 변경 파트 + self.passwordLabel.snp.makeConstraints{ + $0.top.equalTo(codeSendImageView.snp.bottom).offset(100) + $0.left.equalToSuperview().offset(20) + } + + // MARK: 패스워드 변경 위치 + self.pwImageView2.snp.makeConstraints{ + $0.top.equalTo(passwordLabel.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.passwordTextField2.snp.makeConstraints{ + $0.top.equalTo(passwordLabel.snp.bottom).offset(45) + $0.left.equalToSuperview().offset(28) + $0.right.equalToSuperview().offset(-20) + } + + self.pwValidLabel.snp.makeConstraints{ + $0.top.equalTo(pwImageView2.snp.bottom).offset(5) + $0.left.equalTo(pwImageView2.snp.left) + } + + + // MARK: 비밀번호 체크 + self.pwCheckImageView.snp.makeConstraints{ + $0.top.equalTo(pwImageView2.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + self.passwordCheckTextField2.snp.makeConstraints{ + $0.top.equalTo(pwImageView2.snp.bottom).offset(45) + $0.left.equalToSuperview().offset(28) + $0.right.equalToSuperview().offset(-20) + } + + + // MARK: 비밀번호 같은지 체크 + self.pwSameLabel.snp.makeConstraints{ + $0.top.equalTo(pwCheckImageView.snp.bottom).offset(5) + $0.left.equalTo(pwCheckImageView.snp.left) + + } + + + // MARK: 비밀번호 변경 버튼 + self.nextBtnImageView2.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-50) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.pwChangeBtn.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView2).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + } + + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } + +} diff --git a/LGHTSG/LGHTSG/View/LoginView.swift b/LGHTSG/LGHTSG/View/LoginView.swift new file mode 100644 index 0000000..d7d3103 --- /dev/null +++ b/LGHTSG/LGHTSG/View/LoginView.swift @@ -0,0 +1,271 @@ +// +// LoginView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import SnapKit +import Alamofire + +class LoginView: UIView { + + let titleImageView2: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "icon") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let privacyPolicyLabel: UILabel = { + let label = UILabel() + label.text = "개인정보처리방침" + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 13.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + let memberInquiryLabel: UILabel = { + let label = UILabel() + label.text = "회원 정보 문의 : admin@rghtsg.com" + label.textColor = .lightGray + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + let emailTextField: UITextField = { + let email = UITextField() + email.layer.cornerRadius = 5 + email.leftViewMode = .always + email.attributedPlaceholder = NSAttributedString(string: "이메일", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + email.textColor = .white + email.font = UIFont(name: "NanumSquareR", size: 15.0) + email.borderStyle = .none + email.enablesReturnKeyAutomatically = true + email.translatesAutoresizingMaskIntoConstraints = false + return email + }() + + + let passwordTextField: UITextField = { + let password = UITextField() + password.layer.cornerRadius = 5 + password.leftViewMode = .always + password.attributedPlaceholder = NSAttributedString(string: "비밀번호", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + password.borderStyle = .none + password.textColor = .white // 글자색을 흰색으로 + password.isSecureTextEntry = true + password.font = UIFont(name: "NanumSquareR", size: 15.0) + password.translatesAutoresizingMaskIntoConstraints = false + return password + }() + + let emailImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let pwImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let loginBtn2: UIButton = { + let btn = UIButton() + btn.setBackgroundImage(UIImage(named: "login-btn2"), for: .normal) + //btn.addTarget(self, action: #selector(loginBtnClicked2), for: .touchUpInside) + btn.addTarget(self, action: #selector(loginBtnClicked), for: .touchUpInside) + + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let joinBtn2: UIButton = { + let btn = UIButton() + btn.setTitle("회원가입", for: .normal) + btn.setTitleColor(.white, for: .normal) + btn.titleLabel?.font = UIFont(name: "NanumSquareR", size: 12.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + let findPwBtn2: UIButton = { + let btn = UIButton() + btn.setTitle("비밀번호 찾기", for: .normal) + btn.setTitleColor(.white, for: .normal) + btn.titleLabel?.font = UIFont(name: "NanumSquareR", size: 12.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let middleLabel2: UILabel = { + let label = UILabel() + label.text = "|" + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textAlignment = .center + label.textColor = .white + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + + let login = LoginApiModel() + let loginMsgCode = LoginApiHeaderModel() + var jwt : String = "" + var msgCode : Int = 0 + var result = LoginResult(jwt: "") + + @objc func loginBtnClicked(){ + + guard let email = emailTextField.text else {return} + guard let password = passwordTextField.text else {return} + + + let bodyData : Parameters = [ + "email" : email, + "password" : password + ] + + login.requestLoginDataModel(bodyData: bodyData){ + data in + self.jwt = data.jwt + print(data) + print(data.jwt) + } + + loginMsgCode.requestLoginDataModel(bodyData: bodyData){ + data in + self.msgCode = data.resultCode + print(data) + } + + //UserDefaults.standard.set(emailTextField.text, forKey: "id") + //UserDefaults.standard.set(passwordTextField.text, forKey: "pw") + + + } + + + + + override init(frame: CGRect) { + super.init(frame: frame) + + addSubview(titleImageView2) + + addSubview(emailImageView) + addSubview(emailTextField) + + addSubview(pwImageView) + addSubview(passwordTextField) + + addSubview(loginBtn2) + addSubview(joinBtn2) + addSubview(middleLabel2) + addSubview(findPwBtn2) + + + //view.addSubview(pwChangeBtn) + //view.addSubview(middleLabel) + //view.addSubview(joinBtn) + + //view.addSubview(errorEmailLabel) + //view.addSubview(errorPwLabel) + + addSubview(privacyPolicyLabel) + addSubview(memberInquiryLabel) + + + // MARK: 맨 위 이미지 위치 + self.titleImageView2.snp.makeConstraints { + $0.top.equalToSuperview().offset(170) + $0.centerX.equalToSuperview() + } + + self.emailImageView.snp.makeConstraints { + $0.top.equalTo(titleImageView2.snp.bottom).offset(100) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + self.emailTextField.snp.makeConstraints { + $0.top.equalTo(titleImageView2.snp.bottom).offset(115) + $0.left.equalToSuperview().offset(50) + $0.right.equalToSuperview().offset(-30) + } + + + + // MARK: 비밀번호 위치 및 배경 + // 나중에 에러 메세지 위치랑 고려해서 바꿔야함 + self.pwImageView.snp.makeConstraints { + $0.top.equalTo(emailImageView.snp.bottom).offset(20) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + self.passwordTextField.snp.makeConstraints { + $0.top.equalTo(emailImageView.snp.bottom).offset(35) + $0.left.equalToSuperview().offset(50) + $0.right.equalToSuperview().offset(-30) + } + + + // MARK: 로그인 버튼 + self.loginBtn2.snp.makeConstraints { + $0.top.equalTo(pwImageView.snp.bottom).offset(20) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + + // MARK: 회원가입 및 비밀번호 찾기 + self.middleLabel2.snp.makeConstraints{ + $0.top.equalTo(loginBtn2.snp.bottom).offset(25) + $0.centerX.equalTo(loginBtn2) + } + + self.joinBtn2.snp.makeConstraints{ + $0.top.equalTo(loginBtn2.snp.bottom).offset(20) + $0.right.equalTo(middleLabel2.snp.left).offset(-20) + } + + + self.findPwBtn2.snp.makeConstraints{ + $0.top.equalTo(loginBtn2.snp.bottom).offset(20) + $0.left.equalTo(middleLabel2.snp.right).offset(20) + } + + + // MARK: 맨 밑 글자 위치 + self.memberInquiryLabel.snp.makeConstraints{ + $0.centerX.equalToSuperview() + $0.top.equalTo(privacyPolicyLabel.snp.bottom).offset(5) + } + + self.privacyPolicyLabel.snp.makeConstraints{ + $0.centerX.equalToSuperview() + $0.bottom.equalToSuperview().offset(-100) + + } + + + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } + +} diff --git "a/LGHTSG/LGHTSG/View/MyPageView \353\263\265\354\202\254\353\263\270.swift" "b/LGHTSG/LGHTSG/View/MyPageView \353\263\265\354\202\254\353\263\270.swift" new file mode 100644 index 0000000..9d8cfbe --- /dev/null +++ "b/LGHTSG/LGHTSG/View/MyPageView \353\263\265\354\202\254\353\263\270.swift" @@ -0,0 +1,22 @@ +// +// MyPageView.swift +// LGHTSG + + +import Foundation +import UIKit +import Alamofire +import SnapKit + + +class MyPageView : UIView { + + override init(frame: CGRect) { + + super.init(frame: frame) + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} diff --git a/LGHTSG/LGHTSG/View/MyPageView.swift b/LGHTSG/LGHTSG/View/MyPageView.swift new file mode 100644 index 0000000..bf4bc7f --- /dev/null +++ b/LGHTSG/LGHTSG/View/MyPageView.swift @@ -0,0 +1,32 @@ +// +// MyPageView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/26. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class MyPageView : UIView { + + // MARK: 네비게이션 바 생성 + let navigationBar7 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + + override init(frame: CGRect) { + + super.init(frame: frame) + + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} diff --git a/LGHTSG/LGHTSG/View/StartView.swift b/LGHTSG/LGHTSG/View/StartView.swift new file mode 100644 index 0000000..c32e1ab --- /dev/null +++ b/LGHTSG/LGHTSG/View/StartView.swift @@ -0,0 +1,145 @@ + + +import Foundation +import UIKit +import SnapKit +import Alamofire + +class StartView: UIView { + + let titleImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "icon") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let loginBtn: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "login-btn"), for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + let joinBtn: UIButton = { + let btn = UIButton() + btn.setTitle("회원가입", for: .normal) + btn.setTitleColor(.white, for: .normal) + btn.titleLabel?.font = UIFont(name: "NanumSquareR", size: 12.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let findPwBtn: UIButton = { + let btn = UIButton() + btn.setTitle("비밀번호 찾기", for: .normal) + btn.setTitleColor(.white, for: .normal) + btn.titleLabel?.font = UIFont(name: "NanumSquareR", size: 12.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let middleLabel: UILabel = { + let label = UILabel() + label.text = "|" + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textAlignment = .center + label.textColor = .white + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + let kakaoLoginline: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "login-line") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + + // MARK: 카카오 로그인 버튼 생성 + let kakaoLoginBtn: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "kakaoLogin"), for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + + override init(frame: CGRect) { + super.init(frame: frame) + + addSubview(titleImageView) + + addSubview(loginBtn) + + addSubview(joinBtn) + addSubview(middleLabel) + addSubview(findPwBtn) + + addSubview(kakaoLoginline) + addSubview(kakaoLoginBtn) + + + // MARK: 맨 위 이미지 위치 + self.titleImageView.snp.makeConstraints { + $0.top.equalToSuperview().offset(170) + $0.centerX.equalToSuperview() + } + + + + // MARK: 로그인 버튼 + self.loginBtn.snp.makeConstraints { + $0.top.equalTo(titleImageView.snp.bottom).offset(80) + $0.centerX.equalToSuperview() + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + + // MARK: 회원가입 및 비밀번호 찾기 + self.middleLabel.snp.makeConstraints{ + $0.top.equalTo(loginBtn.snp.bottom).offset(15) + $0.centerX.equalTo(loginBtn) + } + + self.joinBtn.snp.makeConstraints{ + $0.top.equalTo(loginBtn.snp.bottom).offset(8) + $0.right.equalTo(middleLabel.snp.left).offset(-20) + } + + + self.findPwBtn.snp.makeConstraints{ + $0.top.equalTo(loginBtn.snp.bottom).offset(8) + $0.left.equalTo(middleLabel.snp.right).offset(20) + } + + + // MARK: 카카오 로그인 버튼 및 라인 위치 + self.kakaoLoginline.snp.makeConstraints{ + $0.top.equalTo(joinBtn.snp.bottom).offset(180) + $0.centerX.equalToSuperview() + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + self.kakaoLoginBtn.snp.makeConstraints{ + $0.top.equalTo(kakaoLoginline.snp.bottom).offset(20) + $0.centerX.equalToSuperview() + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + + + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } + +} diff --git a/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckAgreeView.swift b/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckAgreeView.swift new file mode 100644 index 0000000..efc76de --- /dev/null +++ b/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckAgreeView.swift @@ -0,0 +1,441 @@ +// +// CheckAgreeView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class CheckAgreeView: UIView { + + + var allChecked:Bool = false + var isChecked:Bool = false + var isChecked2:Bool = false + var isChecked3:Bool = false + var isChecked4:Bool = false + + + // MARK: 네비게이션 바 생성 + let navigationBar3 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + + let lineImageView : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "line") + return image + }() + + + let agreeLabel : UILabel = { + let label = UILabel() + label.text = "약관 동의" + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 18.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let allAgreeLabel : UILabel = { + let label = UILabel() + label.text = "모두 동의하기" + label.textColor = .white + label.font = UIFont(name: "NanumSquareR", size: 15.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + // MARK: 체크박스 + let checkBox: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "not-check-box"), for: .normal) + btn.heightAnchor.constraint(equalToConstant: 30).isActive = true + btn.widthAnchor.constraint(equalToConstant: 30).isActive = true + btn.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let checkBox2: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "not-check-box"), for: .normal) + btn.heightAnchor.constraint(equalToConstant: 30).isActive = true + btn.widthAnchor.constraint(equalToConstant: 30).isActive = true + btn.addTarget(self, action: #selector(buttonClicked2), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let checkBox3: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "not-check-box"), for: .normal) + btn.heightAnchor.constraint(equalToConstant: 30).isActive = true + btn.widthAnchor.constraint(equalToConstant: 30).isActive = true + btn.addTarget(self, action: #selector(buttonClicked3), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + let checkBox4: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "not-check-box"), for: .normal) + btn.heightAnchor.constraint(equalToConstant: 30).isActive = true + btn.widthAnchor.constraint(equalToConstant: 30).isActive = true + btn.addTarget(self, action: #selector(buttonClicked4), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + // MARK: 텍스트 상자 + let textboxView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-box") + return image + }() + + let textboxContent: UILabel = { + let label = UILabel() + label.text = "met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem " + label.numberOfLines = 0 + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 15.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + // MARK: 각 이용약관 동의버튼 + let agreeBtn1: UIButton = { + let btn = UIButton() + btn.backgroundColor = .black + btn.setImage(UIImage(named: "서비스 이용약관"), for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let agreeBtn2: UIButton = { + let btn = UIButton() + btn.backgroundColor = .clear + btn.setImage(UIImage(named: "개인정보 처리방침"), for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let agreeBtn3: UIButton = { + let btn = UIButton() + btn.backgroundColor = .clear + btn.setImage(UIImage(named: "마케팅 정보"), for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + // MARK: 다음으로 버튼 + let nextBtnImageView2 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let nextBtn2 : UIButton = { + let btn = UIButton() + btn.setTitle("다음으로", for: .normal) + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + btn.titleLabel?.textColor = .white + btn.titleLabel?.textAlignment = .center + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + // MARK: 버튼 관련 함수 + @objc func buttonClicked(button:UIButton){ + + print("buttonClicked") + + // MARK: 클릭했는데 그 전에 클릭된 것이 없다면 + if allChecked == false { + checkBox.setImage(UIImage(named: "check-box"), for: .normal) + checkBox2.setImage(UIImage(named: "check-box"), for: .normal) + checkBox3.setImage(UIImage(named: "check-box"), for: .normal) + checkBox4.setImage(UIImage(named: "check-box"), for: .normal) + + // MARK: 다 체크되었다는 뜻으로 true로 설정 + isChecked = true + isChecked2 = true + isChecked3 = true + isChecked4 = true + allChecked = true + + // MARK: true 값을 넣어준다. + UserDefaults.standard.set(allChecked, forKey: "allcheck") + UserDefaults.standard.set(isChecked2, forKey: "check1") + UserDefaults.standard.set(isChecked3, forKey: "check2") + UserDefaults.standard.set(isChecked4, forKey: "check3") + + nextBtnImageView2.image = UIImage(named: "highlight-btn") + nextBtn2.titleLabel?.textColor = .systemBlue + + } + else + { + checkBox.setImage(UIImage(named: "not-check-box"), for: .normal) + checkBox2.setImage(UIImage(named: "not-check-box"), for: .normal) + checkBox3.setImage(UIImage(named: "not-check-box"), for: .normal) + checkBox4.setImage(UIImage(named: "not-check-box"), for: .normal) + + isChecked = false + isChecked2 = false + isChecked3 = false + isChecked4 = false + allChecked = false + UserDefaults.standard.set(allChecked, forKey: "allcheck") + UserDefaults.standard.set(isChecked2, forKey: "check1") + UserDefaults.standard.set(isChecked3, forKey: "check2") + UserDefaults.standard.set(isChecked4, forKey: "check3") + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + + } + + + @objc func buttonClicked2(button:UIButton){ + + if isChecked2 == false{ + button.setImage(UIImage(named: "check-box"), for: .normal) + } + else{ + button.setImage(UIImage(named: "not-check-box"), for: .normal) + } + + if isChecked2 == true{ + isChecked2 = false + UserDefaults.standard.set(isChecked2, forKey: "check1") + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + else{ + isChecked2 = true + UserDefaults.standard.set(isChecked2, forKey: "check1") + + // MARK: 두 번째 체크박스는 이미 눌려져있으니 논 외로, 그 외에 다 체크되었는지 + if isChecked3 == true && isChecked4 == true{ + nextBtnImageView2.image = UIImage(named: "highlight-btn") + nextBtn2.titleLabel?.textColor = .systemBlue + } + else { + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + } + } + + + + + + + @objc func buttonClicked3(button:UIButton){ + + if isChecked3 == false{ + button.setImage(UIImage(named: "check-box"), for: .normal) + } + else{ + button.setImage(UIImage(named: "not-check-box"), for: .normal) + } + + if isChecked3 == true{ + isChecked3 = false + UserDefaults.standard.set(isChecked3, forKey: "check2") + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + else{ + isChecked3 = true + UserDefaults.standard.set(isChecked3, forKey: "check2") + + // MARK: 세 번째 체크박스는 이미 눌려져있으니 논 외로, 그 외에 다 체크되었는지 + if isChecked2 == true && isChecked4 == true{ + nextBtnImageView2.image = UIImage(named: "highlight-btn") + nextBtn2.titleLabel?.textColor = .systemBlue + } + else { + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + } + + } + + @objc func buttonClicked4(button:UIButton){ + + if isChecked4 == false{ + button.setImage(UIImage(named: "check-box"), for: .normal) + //check2height.isActive = true + } + else{ + button.setImage(UIImage(named: "not-check-box"), for: .normal) + // check2height.isActive = false + } + + if isChecked4 == true{ + isChecked4 = false + UserDefaults.standard.set(isChecked4, forKey: "check3") + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + else{ + isChecked4 = true + UserDefaults.standard.set(isChecked4, forKey: "check3") + + // MARK: 네 번째 체크박스는 이미 눌려져있으니 논 외로, 그 외에 다 체크되었는지 + if isChecked2 == true && isChecked3 == true{ + nextBtnImageView2.image = UIImage(named: "highlight-btn") + nextBtn2.titleLabel?.textColor = .systemBlue + } + else { + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + + } + } + + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(agreeLabel) + + + addSubview(lineImageView) + addSubview(allAgreeLabel) + addSubview(checkBox) + + + addSubview(textboxView) + addSubview(textboxContent) + + addSubview(checkBox2) + addSubview(checkBox3) + addSubview(checkBox4) + + addSubview(agreeBtn1) + addSubview(agreeBtn2) + addSubview(agreeBtn3) + + addSubview(nextBtnImageView2) + addSubview(nextBtn2) + + + + self.agreeLabel.snp.makeConstraints{ + $0.top.equalToSuperview().offset(80) + $0.left.equalToSuperview().offset(20) + } + + + // MARK: 모두 동의하기 + self.checkBox.snp.makeConstraints{ + $0.top.equalTo(agreeLabel.snp.bottom).offset(50) + $0.left.equalToSuperview().offset(20) + } + + self.allAgreeLabel.snp.makeConstraints{ + $0.top.equalTo(agreeLabel.snp.bottom).offset(55) + $0.left.equalTo(checkBox.snp.right).offset(20) + } + + self.lineImageView.snp.makeConstraints{ + $0.top.equalTo(checkBox.snp.bottom).offset(20) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + + // MARK: 텍스트 박스 + self.textboxView.snp.makeConstraints{ + $0.top.equalTo(lineImageView.snp.bottom).offset(20) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + $0.bottom.equalTo(nextBtnImageView2.snp.top).offset(-300) + } + + self.textboxContent.snp.makeConstraints{ + $0.top.equalTo(lineImageView.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(40) + $0.right.equalToSuperview().offset(-40) + $0.bottom.equalTo(nextBtnImageView2.snp.top).offset(-320) + } + + + // MARK: 마케팅정보 등의 체크박스 + self.checkBox2.snp.makeConstraints{ + $0.top.equalTo(textboxView.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + } + + self.checkBox3.snp.makeConstraints{ + $0.top.equalTo(checkBox2.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + } + + self.checkBox4.snp.makeConstraints{ + $0.top.equalTo(checkBox3.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + } + + + self.agreeBtn1.snp.makeConstraints{ + $0.top.equalTo(textboxView.snp.bottom).offset(35) + $0.left.equalTo(checkBox2.snp.right).offset(20) + } + + self.agreeBtn2.snp.makeConstraints{ + $0.top.equalTo(checkBox2.snp.bottom).offset(35) + $0.left.equalTo(checkBox3.snp.right).offset(20) + } + + self.agreeBtn3.snp.makeConstraints{ + $0.top.equalTo(checkBox3.snp.bottom).offset(35) + $0.left.equalTo(checkBox4.snp.right).offset(20) + } + + // MARK: 다음으로 버튼 + self.nextBtnImageView2.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + + self.nextBtn2.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView2).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + + + } + + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } + +} diff --git a/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPageMarketingView.swift b/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPageMarketingView.swift new file mode 100644 index 0000000..2b5c754 --- /dev/null +++ b/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPageMarketingView.swift @@ -0,0 +1,97 @@ +// +// CheckPageMarketingView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class CheckPageMarketingView: UIView { + + // MARK: 네비게이션 바 생성 + let navigationBar6 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + let textboxImageView4 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-long-box") + return image + }() + + let textContentLabel3 : UILabel = { + let label = UILabel() + label.text = "met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem" + label.textColor = .white + label.numberOfLines = 0 + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + // MARK: 다음으로 버튼 + let nextBtnImageView5 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "highlight-btn") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let nextLabel5 : UIButton = { + let btn = UIButton() + btn.setTitle("동의하기", for: .normal) + btn.setTitleColor(.systemBlue, for: .normal) + btn.titleLabel?.textAlignment = .center + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(textboxImageView4) + addSubview(textContentLabel3) + + addSubview(nextBtnImageView5) + addSubview(nextLabel5) + + self.textboxImageView4.snp.makeConstraints{ + $0.top.equalToSuperview().offset(80) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.textContentLabel3.snp.makeConstraints{ + $0.top.equalTo(textboxImageView4.snp.top).offset(20) + $0.left.equalTo(textboxImageView4.snp.left).offset(20) + $0.right.equalTo(textboxImageView4.snp.right).offset(-20) + $0.bottom.equalTo(textboxImageView4.snp.bottom).offset(-20) + } + + self.nextBtnImageView5.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.nextLabel5.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView5).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} diff --git a/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPagePrivacyView.swift b/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPagePrivacyView.swift new file mode 100644 index 0000000..d4fa957 --- /dev/null +++ b/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPagePrivacyView.swift @@ -0,0 +1,121 @@ +// +// CheckPagePrivacyView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class CheckPagePrivacyView: UIView { + + // MARK: 네비게이션 바 생성 + let navigationBar5 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + let textboxImageView3 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-long-box") + return image + }() + + + //MARK: let scrollview + let scrollView2: UIScrollView = { + let scrollView = UIScrollView() + scrollView.translatesAutoresizingMaskIntoConstraints = false + scrollView.delaysContentTouches = true + scrollView.backgroundColor = .clear + return scrollView + }() + + + let scrollAddView2: UIView = { + let view = UIView() + return view + }() + + let textContentLabel2 : UILabel = { + let label = UILabel() + label.text = "< 라고할때살걸 >('https://api.lghtsg.site'이하 '라고할때살걸')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다\n\n제1조(개인정보의 처리목적)\n< 라고할때살걸 >(이)가 개인정보 보호법 제32조에 따라 등록․공개하는 개인정보파일의 처리목적은 다음과 같습니다.\n\n1. 개인정보 파일명 : 라고할때살걸 사용자 정보\n개인정보의 처리목적 : 서비스 기능 제공을 위한 사용자 구분\n수집방법 : 앱\n보유근거 : 서비스 기능 제공을 위한 사용자 구분\n보유기간 : 1년\n관련법령 : 신용정보의 수집/처리 및 이용 등에 관한 기록 : 3년\n\n\n제2조(처리하는 개인정보의 항목)\n\n① < 라고할때살걸 >은(는) 다음의 개인정보 항목을 처리하고 있습니다.\n\n1< 라고할때살걸 사용자 정보 >\n필수항목 : 이메일, 비밀번호, 로그인ID, 이름, 서비스 이용 기록, 쿠키\n선택항목 :\n 1. 개인정보분쟁조정위원회 : (국번없이) 1833-6972 (www.kopico.go.kr)\n" + label.textColor = .white + label.numberOfLines = 0 + label.font = UIFont(name: "NanumSquareR", size: 13.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + // MARK: 다음으로 버튼 + let nextBtnImageView4 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "highlight-btn") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let nextLabel4 : UIButton = { + let btn = UIButton() + btn.setTitle("동의하기", for: .normal) + btn.setTitleColor(.systemBlue, for: .normal) + btn.titleLabel?.textAlignment = .center + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(textboxImageView3) + addSubview(textContentLabel2) + + textContentLabel2.addSubview(scrollView2) + + addSubview(nextBtnImageView4) + addSubview(nextLabel4) + + self.textboxImageView3.snp.makeConstraints{ + $0.top.equalToSuperview().offset(80) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.textContentLabel2.snp.makeConstraints{ + $0.top.equalTo(textboxImageView3.snp.top).offset(20) + $0.left.equalTo(textboxImageView3.snp.left).offset(20) + $0.right.equalTo(textboxImageView3.snp.right).offset(-20) + $0.bottom.equalTo(textboxImageView3.snp.bottom).offset(-20) + } + + self.nextBtnImageView4.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.nextLabel4.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView4).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + + scrollView2.leadingAnchor.constraint(equalTo: textContentLabel2.leadingAnchor).isActive = true + scrollView2.trailingAnchor.constraint(equalTo: textContentLabel2.trailingAnchor).isActive = true + scrollView2.topAnchor.constraint(equalTo: textContentLabel2.bottomAnchor).isActive = true + scrollView2.bottomAnchor.constraint(equalTo: textContentLabel2.bottomAnchor).isActive = true + + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} diff --git a/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPageServiceView.swift b/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPageServiceView.swift new file mode 100644 index 0000000..02dc539 --- /dev/null +++ b/LGHTSG/LGHTSG/View/with RegisterView/CheckView/CheckPageServiceView.swift @@ -0,0 +1,101 @@ +// +// CheckPageServiceView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class CheckPageServiceView: UIView { + + // MARK: 네비게이션 바 생성 + let navigationBar4 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + let textboxImageView2 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-long-box") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + + let textContentLabel : UILabel = { + let label = UILabel() + label.text = "met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem" + label.textColor = .white + label.numberOfLines = 0 + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + // MARK: 다음으로 버튼 + let nextBtnImageView3 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "highlight-btn") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let nextLabel3 : UIButton = { + let btn = UIButton() + btn.setTitle("동의하기", for: .normal) + btn.titleLabel?.textAlignment = .center + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + btn.setTitleColor(.systemBlue, for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(textboxImageView2) + addSubview(textContentLabel) + + addSubview(nextBtnImageView3) + addSubview(nextLabel3) + + self.textboxImageView2.snp.makeConstraints{ + $0.top.equalToSuperview().offset(80) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.textContentLabel.snp.makeConstraints{ + $0.top.equalTo(textboxImageView2.snp.top).offset(20) + $0.left.equalTo(textboxImageView2.snp.left).offset(20) + $0.right.equalTo(textboxImageView2.snp.right).offset(-20) + $0.bottom.equalTo(textboxImageView2.snp.bottom).offset(-20) + } + + + self.nextBtnImageView3.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.nextLabel3.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView3).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + } + + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} diff --git a/LGHTSG/LGHTSG/View/with RegisterView/JoinSuccessView.swift b/LGHTSG/LGHTSG/View/with RegisterView/JoinSuccessView.swift new file mode 100644 index 0000000..fbd0e3d --- /dev/null +++ b/LGHTSG/LGHTSG/View/with RegisterView/JoinSuccessView.swift @@ -0,0 +1,98 @@ +// +// JoinSuccessView.swift +// LGHTSG +// +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class JoinSuccessView : UIView { + + let iconVerticalImageView : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "icon_vertical") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + + let successLabel : UILabel = { + let label = UILabel() + label.text = "회원가입이 완료되었습니다." + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 16.0) + return label + }() + + let successContent : UILabel = { + let label = UILabel() + label.text = "라고할때살걸과 함께\n쉬운 금융 습관을 시작하세요!" + label.textColor = .white + label.numberOfLines = 0 + label.font = UIFont(name: "NanumSquareR", size: 14.0) + label.textAlignment = .center + return label + }() + + let successBtnImageView : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "success-btn") + return image + }() + + let successBtn : UIButton = { + let label = UIButton() + label.setTitle("라고할때살걸 시작하기", for: .normal) + label.titleLabel?.font = UIFont(name: "NanumSquareB", size: 16.0) + label.titleLabel?.textColor = .white + label.titleLabel?.textAlignment = .center + return label + }() + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(iconVerticalImageView) + addSubview(successLabel) + addSubview(successContent) + addSubview(successBtnImageView) + addSubview(successBtn) + + self.iconVerticalImageView.snp.makeConstraints { + $0.top.equalToSuperview().offset(250) + $0.centerX.equalToSuperview() + } + + self.successLabel.snp.makeConstraints{ + $0.top.equalTo(iconVerticalImageView.snp.bottom).offset(100) + $0.centerX.equalToSuperview() + } + + self.successContent.snp.makeConstraints{ + $0.top.equalTo(successLabel.snp.bottom).offset(20) + $0.centerX.equalToSuperview() + } + + + self.successBtnImageView.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-50) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.successBtn.snp.makeConstraints{ + $0.top.equalTo(successBtnImageView).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/LGHTSG/LGHTSG/View/with RegisterView/RegisterView.swift b/LGHTSG/LGHTSG/View/with RegisterView/RegisterView.swift new file mode 100644 index 0000000..401d1b1 --- /dev/null +++ b/LGHTSG/LGHTSG/View/with RegisterView/RegisterView.swift @@ -0,0 +1,530 @@ +// +// RegisterView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class RegisterView : UIView { + + // MARK: 네비게이션 바 생성 + let navigationBar2 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + var profileImageData : String! + + // MARK: imagePicker + var profileImagePicker = UIImagePickerController() + + + // MARK: 사용자 이름 + let nameImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + // hell@world.com, test1234! + + let nameTextField: UITextField = { + let name = UITextField() + name.leftViewMode = .always + name.attributedPlaceholder = NSAttributedString(string: "이름", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + name.borderStyle = .none + name.textColor = .white // 글자색을 흰색으로 + name.font = UIFont(name: "NanumSquareB", size: 15.0) + name.enablesReturnKeyAutomatically = true + name.translatesAutoresizingMaskIntoConstraints = false + return name + }() + + // MARK: 이메일 인증번호 보내기 + let emailSendImageView2: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "send-code-btn") + return image + }() + + let emailTextField3: UITextField = { + let label = UITextField() + label.attributedPlaceholder = NSAttributedString(string: "이메일", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + label.leftViewMode = .always + label.keyboardType = .emailAddress + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 15.0) + label.borderStyle = .none + label.enablesReturnKeyAutomatically = true + return label + }() + + let emailCodeBtn2: UIButton = { + let btn = UIButton() + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 12.0) + btn.addTarget(self, action: #selector(emailCodeBtnClicked2), for: .touchUpInside) + //btn.backgroundColor = .red + btn.layer.cornerRadius = 5 + return btn + }() + + + // MARK: 인증번호 발송 메세지 + let codeSendLabel2: UILabel = { + let label = UILabel() + label.text = "인증번호가 발송되었습니다" + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .white + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + // MARK: 인증번호 확인하기 + let codeTextField2: UITextField = { + let label = UITextField() + label.attributedPlaceholder = NSAttributedString(string: "인증번호", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + label.leftViewMode = .always + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 15.0) + label.borderStyle = .none + label.enablesReturnKeyAutomatically = true + label.keyboardType = .numberPad + return label + }() + + let codeSendImageView2: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "confirm-code-btn") + return image + }() + + + let codeConfirmBtn2: UIButton = { + let btn = UIButton() + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 12.0) + //btn.backgroundColor = .blue + btn.addTarget(self, action: #selector(codeConfirmBtnClicked2), for: .touchUpInside) + btn.layer.cornerRadius = 5 + return btn + }() + + + let codeConfirmLabel2: UILabel = { + let label = UILabel() + label.text = "인증번호가 일치하지 않습니다." + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .systemRed + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + // MARK: 비밀번호 + let pwImageView2: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let passwordTextField3: UITextField = { + let name = UITextField() + name.leftViewMode = .always + name.attributedPlaceholder = NSAttributedString(string: "비밀번호", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + name.borderStyle = .none + name.textColor = .white // 글자색을 흰색으로 + name.isSecureTextEntry = true + name.font = UIFont(name: "NanumSquareB", size: 15.0) + name.addTarget(self, action: #selector(pwFieldEdited2), for: UIControl.Event.editingChanged) + name.enablesReturnKeyAutomatically = true + name.translatesAutoresizingMaskIntoConstraints = false + return name + }() + + let pwValidLabel2: UILabel = { + let label = UILabel() + label.text = "영문, 숫자, 특수문자를 포함한 7자 이상으로 입력해주세요." + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .systemRed + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + // MARK: 비밀번호 찾기 + let pwImageCheckView2: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let passworCheckdTextField3: UITextField = { + let name = UITextField() + name.leftViewMode = .always + name.attributedPlaceholder = NSAttributedString(string: "비밀번호 확인", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + name.borderStyle = .none + name.textColor = .white // 글자색을 흰색으로 + name.isSecureTextEntry = true + name.font = UIFont(name: "NanumSquareB", size: 15.0) + name.addTarget(self, action: #selector(pwFieldEdited2), for: UIControl.Event.editingChanged) + name.enablesReturnKeyAutomatically = true + name.translatesAutoresizingMaskIntoConstraints = false + return name + }() + + let pwSameLabel2: UILabel = { + let label = UILabel() + label.text = "비밀번호가 일치하지 않습니다." + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .systemRed + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let nextBtnImageView : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + return image + }() + + let nextBtn : UIButton = { + let label = UIButton() + label.setTitle("다음으로", for: .normal) + label.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + label.titleLabel?.textColor = .white + label.titleLabel?.textAlignment = .center + label.addTarget(self, action: #selector(joinBtnClicked2), for: .touchUpInside) + return label + }() + + + + let emailCode2 = emailApiModel() + var code : String = "dklsfjkljdlvnmnxlmnszlksjwr091u3tghjkfnm,gdsajlkfjsclxnm,zbghjkjilekdsfkhglksefmdfbjfo;gsdlfknjbldkgs" + + // MARK: 인증번호 발송 함수 + @objc func emailCodeBtnClicked2(){ + print("인증번호 발송버튼") + guard let email = emailTextField3.text else {return} + + let bodyData : Parameters = [ + "email" : email, + ] + + emailCode2.requestEmailDataModel(bodyData: bodyData){ + data in + self.code = data.body + print(self.code) + } + sendCodeheight2.isActive = false + } + + + // MARK: 인증번호 확인 함수 + @objc func codeConfirmBtnClicked2(){ + if codeTextField2.text == self.code { + print("번호같음") + emailTextField3.isUserInteractionEnabled = false + codeTextField2.isUserInteractionEnabled = false + codeConfirmheight2.isActive = true + emailSuccess = "1" + } + else { + codeConfirmheight2.isActive = false + } + } + + var validPw : String = "dlfksjd" + var samePw : String = "slkfjlkdjflk" + var emailSuccess : String = "dlskjflksjq3oi39hs" + + // MARK: 패스워드 맞는지 확인하는 함수 + func isSamePassword2(_ first: UITextField, _ second: UITextField) -> Bool { + if (first.text == second.text){ + samePw = "1" + return true + } + return false + } + + // MARK: 패스워드 유효한지 확인 함수 + func isValidPassword2(pw: String?) -> Bool{ + + let regex = "^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+=-]).{8,50}" + let predicate = NSPredicate(format: "SELF MATCHES %@", regex) + + if let hasPassword = pw{ + // 길이 확인 + if hasPassword.count > 7 && predicate.evaluate(with: hasPassword){ + print("패스워드 유효") + validPw = "1" + return true + } + } + return false + } + + + var isCheck3 : Bool = false + var isCheck4 : Bool = false + + // MARK: 패스워드의 결과에 따라 메세지를 보여줄지 여부를 정하는 코드 + @objc func pwFieldEdited2(textField: UITextField) { + + if textField == passwordTextField3 { + if isValidPassword2(pw: passwordTextField3.text) + { + print("유효함") + pwheight3.isActive = true + isCheck3 = true + } + else{ + print("유효하지않음") + pwheight3.isActive = false + isCheck3 = false + + } + } + + else if textField == passworCheckdTextField3 { + if isSamePassword2(passwordTextField3, passworCheckdTextField3) + { + print("같음") + pwheight4.isActive = true + isCheck4 = true + } + else{ + print("다름") + pwheight4.isActive = false + isCheck4 = false + } + } + } + + // MARK: 인증번호 관련 동적 변화 라벨 + var sendCodeheight2: NSLayoutConstraint! + var codeConfirmheight2: NSLayoutConstraint! + + // MARK: 비밀번호에 따른 메세지 + var pwheight3: NSLayoutConstraint! + var pwheight4: NSLayoutConstraint! + + func heightSetting2(){ + + sendCodeheight2 = codeSendLabel2.heightAnchor.constraint(equalToConstant: 0) + sendCodeheight2.isActive = true + + codeConfirmheight2 = codeConfirmLabel2.heightAnchor.constraint(equalToConstant: 0) + codeConfirmheight2.isActive = true + + pwheight3 = pwValidLabel2.heightAnchor.constraint(equalToConstant: 0) + pwheight3.isActive = true + + pwheight4 = pwSameLabel2.heightAnchor.constraint(equalToConstant: 0) + pwheight4.isActive = true + + } + + + let joinAccess = JoinApiModel() + var userIndex : Int! + + @objc func joinBtnClicked2(){ + + if validPw == "1" && samePw == "1"{ + if emailSuccess == "1" { + print("회원가입 가능!") + guard let userName = nameTextField.text else {return} + guard let email = emailTextField3.text else {return} + guard let password = passwordTextField3.text else {return} + let emailCheck = "1" + let profileImg = "urlurl" + + let bodyData : Parameters = [ + "userName" : userName, + "email" : email, + "password" : password, + "emailCheck" : emailCheck, + "profileImg" : profileImg + ] + + joinAccess.requestJoinDataModel(bodyData: bodyData){ + data in + print(data.body) + } + UserDefaults.standard.set(true, forKey: "joinSuccess") + } + else { + print("인증번호 비완료") + } + } + else{ + print("비밀번호 과정을 통과하지못해 회원가입 불가능") + } + } + + + override init(frame: CGRect) { + + super.init(frame: frame) + + heightSetting2() + + addSubview(nameImageView) + addSubview(nameTextField) + + addSubview(emailSendImageView2) + addSubview(emailTextField3) + addSubview(emailCodeBtn2) + addSubview(codeSendLabel2) + + addSubview(codeSendImageView2) + addSubview(codeTextField2) + addSubview(codeConfirmBtn2) + addSubview(codeConfirmLabel2) + + + addSubview(pwImageView2) + addSubview(passwordTextField3) + addSubview(pwValidLabel2) + + addSubview(pwImageCheckView2) + addSubview(passworCheckdTextField3) + addSubview(pwSameLabel2) + + + addSubview(nextBtnImageView) + addSubview(nextBtn) + + + + // MARK: 이름 설정 위치 + self.nameImageView.snp.makeConstraints{ + $0.top.equalToSuperview().offset(40) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.nameTextField.snp.makeConstraints{ + $0.top.equalToSuperview().offset(55) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-20) + } + + // MARK: 이메일 작성 및 전송 버튼 위치 + self.emailSendImageView2.snp.makeConstraints{ + $0.top.equalTo(nameImageView.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.emailTextField3.snp.makeConstraints{ + $0.top.equalTo(nameImageView.snp.bottom).offset(45) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-120) + } + + self.emailCodeBtn2.snp.makeConstraints{ + $0.top.equalTo(nameImageView.snp.bottom).offset(30) + $0.left.equalTo(emailTextField3.snp.right).offset(10) + $0.right.equalTo(emailSendImageView2.snp.right).offset(0) + $0.height.equalTo(emailSendImageView2).offset(0) + } + + + // MARK: 인증번호 작성 및 확인 버튼 위치 + self.codeSendImageView2.snp.makeConstraints{ + $0.top.equalTo(emailSendImageView2.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.codeSendLabel2.snp.makeConstraints{ + $0.top.equalTo(emailSendImageView2.snp.bottom).offset(5) + $0.left.equalTo(emailSendImageView2.snp.left) + } + + self.codeTextField2.snp.makeConstraints{ + $0.top.equalTo(emailSendImageView2.snp.bottom).offset(45) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-120) + } + + self.codeConfirmBtn2.snp.makeConstraints{ + $0.top.equalTo(codeSendImageView2.snp.top).offset(0) + $0.left.equalTo(codeTextField2.snp.right).offset(10) + $0.right.equalTo(codeSendImageView2.snp.right).offset(0) + $0.height.equalTo(codeSendImageView2.snp.height).offset(0) + } + + self.codeConfirmLabel2.snp.makeConstraints{ + $0.top.equalTo(codeSendImageView2.snp.bottom).offset(5) + $0.left.equalTo(codeSendImageView2.snp.left) + } + + + // MARK: 비밀번호 설정 위치 + self.pwImageView2.snp.makeConstraints{ + $0.top.equalTo(codeConfirmBtn2.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.passwordTextField3.snp.makeConstraints{ + $0.top.equalTo(codeConfirmBtn2.snp.bottom).offset(45) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-20) + } + + self.pwValidLabel2.snp.makeConstraints{ + $0.top.equalTo(pwImageView2.snp.bottom).offset(5) + $0.left.equalTo(pwImageView2.snp.left) + } + + self.pwImageCheckView2.snp.makeConstraints{ + $0.top.equalTo(pwImageView2.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.passworCheckdTextField3.snp.makeConstraints{ + $0.top.equalTo(pwImageView2.snp.bottom).offset(45) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-20) + } + + self.pwSameLabel2.snp.makeConstraints{ + $0.top.equalTo(pwImageCheckView2.snp.bottom).offset(5) + $0.left.equalTo(pwImageCheckView2.snp.left) + } + + // MARK: 다음으로 버튼 + self.nextBtnImageView.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.nextBtn.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} + diff --git a/LGHTSG/LGHTSG/ViewController.swift b/LGHTSG/LGHTSG/ViewController.swift deleted file mode 100644 index 87d3381..0000000 --- a/LGHTSG/LGHTSG/ViewController.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// ViewController.swift -// LGHTSG -// -// Created by HA on 2023/01/09. -// - -import UIKit - -class ViewController: UIViewController { - - - override func viewDidLoad() { - super.viewDidLoad() - view.backgroundColor = .darkGray - } - - -} - diff --git a/LGHTSG/LGHTSG/ViewModel/ChangePwApiModel.swift b/LGHTSG/LGHTSG/ViewModel/ChangePwApiModel.swift new file mode 100644 index 0000000..598bef5 --- /dev/null +++ b/LGHTSG/LGHTSG/ViewModel/ChangePwApiModel.swift @@ -0,0 +1,40 @@ +// +// ChangePwApiModel.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/31. +// + +import Foundation +import Alamofire + + +class ChangePwApiModel { + + var urlString : String? + + func requestChangeDataModel(bodyData : Parameters, onCompleted : @escaping(changePw) -> Void){ + + urlString = "http://api.lghtsg.site:8090/users/changeInfo/pw-not-login" + + guard let urlString = urlString else{ return} + guard let url = URL(string: urlString) else {return print("erorr")} + + + let header : HTTPHeaders = [ + "Content-Type" : "application/json" + ] + + + AF.request(url, method: .patch, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: changePw.self){ response in + switch response.result { + case .success(let response): + onCompleted(response) + case .failure(let error): + print(error.localizedDescription) + } + } + + } + +} diff --git a/LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift b/LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift new file mode 100644 index 0000000..11221a4 --- /dev/null +++ b/LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift @@ -0,0 +1,36 @@ +// +// LoginData.swift +// LGHTSG + +import Foundation +import Alamofire + +class JoinApiModel { + + var urlString : String? + + func requestJoinDataModel(bodyData : Parameters, onCompleted : @escaping(join) -> Void){ + + urlString = "http://api.lghtsg.site:8090/users/sign-up" + + guard let urlString = urlString else{ return} + guard let url = URL(string: urlString) else {return print("erorr")} + + + let header : HTTPHeaders = [ + "Content-Type" : "application/json" + ] + + + AF.request(url, method: .post, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: join.self){ response in + switch response.result { + case .success(let response): + onCompleted(response) + case .failure(let error): + print(error.localizedDescription) + } + } + + } + +} diff --git a/LGHTSG/LGHTSG/ViewModel/LoginApiHeaderModel.swift b/LGHTSG/LGHTSG/ViewModel/LoginApiHeaderModel.swift new file mode 100644 index 0000000..10234dc --- /dev/null +++ b/LGHTSG/LGHTSG/ViewModel/LoginApiHeaderModel.swift @@ -0,0 +1,41 @@ +// +// LoginApiHeaderModel.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/26. +// + +import Foundation +import Alamofire + +class LoginApiHeaderModel { + + var urlString : String? + + func requestLoginDataModel(bodyData : Parameters, onCompleted : @escaping(Login.header) -> Void){ + + urlString = "http://api.lghtsg.site:8090/users/log-in" + + guard let urlString = urlString else{ return} + guard let url = URL(string: urlString) else {return print("erorr")} + + + let header : HTTPHeaders = [ + "Content-Type" : "application/json" + ] + + + AF.request(url, method: .post, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: Login.self){ response in + switch response.result { + case .success(let response): + onCompleted(response.header) + case .failure(let error): + print("=======") + print(response) + print(error.localizedDescription) + } + } + + } + +} diff --git a/LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift b/LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift new file mode 100644 index 0000000..877ef06 --- /dev/null +++ b/LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift @@ -0,0 +1,37 @@ +// +// LoginData.swift +// LGHTSG + +import Foundation +import Alamofire + +class LoginApiModel { + + var urlString : String? + + func requestLoginDataModel(bodyData : Parameters, onCompleted : @escaping(Login.body) -> Void){ + + urlString = "http://api.lghtsg.site:8090/users/log-in" + + guard let urlString = urlString else{ return} + guard let url = URL(string: urlString) else {return print("erorr")} + + + let header : HTTPHeaders = [ + "Content-Type" : "application/json" + ] + + AF.request(url, method: .post, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: Login.self){ response in + switch response.result { + case .success(let response): + onCompleted(response.body) + case .failure(let error): + print(error.localizedDescription) + } + } + + + + } + +} diff --git a/LGHTSG/LGHTSG/ViewModel/emailApiModel.swift b/LGHTSG/LGHTSG/ViewModel/emailApiModel.swift new file mode 100644 index 0000000..0456e56 --- /dev/null +++ b/LGHTSG/LGHTSG/ViewModel/emailApiModel.swift @@ -0,0 +1,36 @@ +// +// LoginData.swift +// LGHTSG + +import Foundation +import Alamofire + +class emailApiModel { + + var urlString : String? + + func requestEmailDataModel(bodyData : Parameters, onCompleted : @escaping(email) -> Void){ + + urlString = "http://api.lghtsg.site:8090/users/sign-up/email-check" + + guard let urlString = urlString else{ return} + guard let url = URL(string: urlString) else {return print("erorr")} + + + let header : HTTPHeaders = [ + "Content-Type" : "application/json" + ] + + + AF.request(url, method: .post, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: email.self){ response in + switch response.result { + case .success(let response): + onCompleted(response) + case .failure(let error): + print(error.localizedDescription) + } + } + + } + +} From da03a1c380247f487729ca595c38c1f154046aac Mon Sep 17 00:00:00 2001 From: Hongsoojeong Date: Wed, 1 Feb 2023 20:00:40 +0900 Subject: [PATCH 2/2] feat : merge --- LGHTSG/LGHTSG.xcodeproj/project.pbxproj | 241 +++++++++- LGHTSG/LGHTSG/App/SceneDelegate.swift | 5 + .../btn/logout-btn.imageset/Contents.json | 23 + ...52\267\270\354\225\204\354\233\203_1x.png" | Bin 0 -> 791 bytes ...52\267\270\354\225\204\354\233\203_2x.png" | Bin 0 -> 1408 bytes ...52\267\270\354\225\204\354\233\203_3x.png" | Bin 0 -> 1869 bytes .../Assets.xcassets/mypage/Contents.json | 6 + .../mypage/mypage1.imageset/Contents.json | 23 + .../mypage/mypage1.imageset/Group 141_1x.png | Bin 0 -> 1078 bytes .../mypage/mypage1.imageset/Group 141_2x.png | Bin 0 -> 2232 bytes .../mypage/mypage1.imageset/Group 141_3x.png | Bin 0 -> 3379 bytes .../mypage/mypage2.imageset/Contents.json | 23 + .../mypage/mypage2.imageset/Group 142__1x.png | Bin 0 -> 864 bytes .../mypage/mypage2.imageset/Group 142__2x.png | Bin 0 -> 1675 bytes .../mypage/mypage2.imageset/Group 142__3x.png | Bin 0 -> 2565 bytes .../mypage/mypage3.imageset/Contents.json | 23 + .../mypage/mypage3.imageset/Group 143__1x.png | Bin 0 -> 1102 bytes .../mypage/mypage3.imageset/Group 143__2x.png | Bin 0 -> 2193 bytes .../mypage/mypage3.imageset/Group 143__3x.png | Bin 0 -> 3267 bytes .../FindPasswordController.swift | 56 +++ .../Authentication/LoginController.swift | 317 ++++++++++++ .../Authentication/MyPageViewController.swift | 57 +++ .../RegisterationController.swift | 67 +++ .../Controller/ChartViewController.swift | 368 ++++++++++++++ .../Controller/ExploreViewController.swift | 244 ++++++++++ .../Controller/HomeViewController.swift | 171 +++++++ .../LGHTSG/Controller/MainTabController.swift | 26 + .../Controller/StockChartViewController.swift | 455 ++++++++++++++++++ LGHTSG/LGHTSG/Info.plist | 5 + .../Model/login&join&changepw/changePw.swift | 17 + .../Model/login&join&changepw/email.swift | 17 + .../Model/login&join&changepw/join.swift | 22 + .../Model/login&join&changepw/login.swift | 22 + .../Model/login&join&changepw/user.swift | 22 + .../View/CheckView/CheckAgreeView.swift | 441 +++++++++++++++++ .../CheckView/CheckPageMarketingView.swift | 97 ++++ .../View/CheckView/CheckPagePrivacyView.swift | 121 +++++ .../View/CheckView/CheckPageServiceView.swift | 101 ++++ LGHTSG/LGHTSG/View/LoginView.swift | 88 ++++ LGHTSG/LGHTSG/View/MyPageView.swift | 80 +++ .../View/New Group1/HomeTableCell.swift | 189 ++++++++ .../with RegisterView/JoinSuccessView.swift | 7 + .../View/with RegisterView/RegisterView.swift | 24 + LGHTSG/LGHTSG/ViewController.swift | 55 +++ LGHTSG/LGHTSG/ViewModel/ChangePwModel.swift | 40 ++ LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift | 8 + .../ViewModel/LoginApiHeaderModel.swift | 42 ++ LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift | 9 + 48 files changed, 3511 insertions(+), 1 deletion(-) create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/Contents.json create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/\353\241\234\352\267\270\354\225\204\354\233\203_1x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/\353\241\234\352\267\270\354\225\204\354\233\203_2x.png" create mode 100644 "LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/\353\241\234\352\267\270\354\225\204\354\233\203_3x.png" create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Group 141_1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Group 141_2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Group 141_3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Group 142__1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Group 142__2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Group 142__3x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage3.imageset/Contents.json create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage3.imageset/Group 143__1x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage3.imageset/Group 143__2x.png create mode 100644 LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage3.imageset/Group 143__3x.png create mode 100644 LGHTSG/LGHTSG/Controller/Authentication/FindPasswordController.swift create mode 100644 LGHTSG/LGHTSG/Controller/Authentication/MyPageViewController.swift create mode 100644 LGHTSG/LGHTSG/Controller/ChartViewController.swift create mode 100644 LGHTSG/LGHTSG/Controller/ExploreViewController.swift create mode 100644 LGHTSG/LGHTSG/Controller/HomeViewController.swift create mode 100644 LGHTSG/LGHTSG/Controller/StockChartViewController.swift create mode 100644 LGHTSG/LGHTSG/Model/login&join&changepw/changePw.swift create mode 100644 LGHTSG/LGHTSG/Model/login&join&changepw/email.swift create mode 100644 LGHTSG/LGHTSG/Model/login&join&changepw/join.swift create mode 100644 LGHTSG/LGHTSG/Model/login&join&changepw/login.swift create mode 100644 LGHTSG/LGHTSG/Model/login&join&changepw/user.swift create mode 100644 LGHTSG/LGHTSG/View/CheckView/CheckAgreeView.swift create mode 100644 LGHTSG/LGHTSG/View/CheckView/CheckPageMarketingView.swift create mode 100644 LGHTSG/LGHTSG/View/CheckView/CheckPagePrivacyView.swift create mode 100644 LGHTSG/LGHTSG/View/CheckView/CheckPageServiceView.swift create mode 100644 LGHTSG/LGHTSG/View/New Group1/HomeTableCell.swift create mode 100644 LGHTSG/LGHTSG/ViewController.swift create mode 100644 LGHTSG/LGHTSG/ViewModel/ChangePwModel.swift diff --git a/LGHTSG/LGHTSG.xcodeproj/project.pbxproj b/LGHTSG/LGHTSG.xcodeproj/project.pbxproj index df1295f..2dc015b 100644 --- a/LGHTSG/LGHTSG.xcodeproj/project.pbxproj +++ b/LGHTSG/LGHTSG.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 07557561296BFC5900B8AF77 /* MainTabController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07557560296BFC5900B8AF77 /* MainTabController.swift */; }; 07557563296BFCD300B8AF77 /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07557562296BFCD300B8AF77 /* Cell.swift */; }; 8E910354CAD5238FB38C267D /* Pods_LGHTSG.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A81FE00F91FA41642246A20 /* Pods_LGHTSG.framework */; }; +<<<<<<< Updated upstream F51D92FE29803EB300DFC7E4 /* LoginModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51D92FD29803EB300DFC7E4 /* LoginModel.swift */; }; F51D930029803EE700DFC7E4 /* emailCheckModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51D92FF29803EE700DFC7E4 /* emailCheckModel.swift */; }; F51D930229803F3D00DFC7E4 /* NanumSquareR.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F51D930129803F3D00DFC7E4 /* NanumSquareR.ttf */; }; @@ -51,6 +52,38 @@ F59B5F992985453D007F13CA /* JoinSuccessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59B5F982985453D007F13CA /* JoinSuccessView.swift */; }; F59B5F9C29854741007F13CA /* RegisterationSuccessController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59B5F9B29854741007F13CA /* RegisterationSuccessController.swift */; }; F59B5F9E29854B89007F13CA /* user.swift in Sources */ = {isa = PBXBuildFile; fileRef = F59B5F9D29854B89007F13CA /* user.swift */; }; +======= + F52989F4298A63FB00C5B85C /* login.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52989F3298A63FB00C5B85C /* login.swift */; }; + F52989F6298A640600C5B85C /* email.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52989F5298A640600C5B85C /* email.swift */; }; + F52989F8298A641300C5B85C /* join.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52989F7298A641300C5B85C /* join.swift */; }; + F52989FA298A641F00C5B85C /* user.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52989F9298A641F00C5B85C /* user.swift */; }; + F52989FC298A642D00C5B85C /* changePw.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52989FB298A642D00C5B85C /* changePw.swift */; }; + F52989FF298A645100C5B85C /* RegisterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52989FE298A645100C5B85C /* RegisterView.swift */; }; + F5298A01298A646600C5B85C /* JoinSuccessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A00298A646600C5B85C /* JoinSuccessView.swift */; }; + F5298A04298A64C300C5B85C /* CheckAgreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A03298A64C300C5B85C /* CheckAgreeView.swift */; }; + F5298A06298A64CA00C5B85C /* CheckPageServiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A05298A64CA00C5B85C /* CheckPageServiceView.swift */; }; + F5298A08298A64D300C5B85C /* CheckPagePrivacyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A07298A64D300C5B85C /* CheckPagePrivacyView.swift */; }; + F5298A0A298A64DB00C5B85C /* CheckPageMarketingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A09298A64DB00C5B85C /* CheckPageMarketingView.swift */; }; + F5298A0C298A64FE00C5B85C /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A0B298A64FE00C5B85C /* LoginView.swift */; }; + F5298A0E298A651700C5B85C /* StartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A0D298A651700C5B85C /* StartView.swift */; }; + F5298A10298A652400C5B85C /* FindPwView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A0F298A652400C5B85C /* FindPwView.swift */; }; + F5298A12298A653C00C5B85C /* LoginApiModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A11298A653C00C5B85C /* LoginApiModel.swift */; }; + F5298A14298A654B00C5B85C /* LoginApiHeaderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A13298A654B00C5B85C /* LoginApiHeaderModel.swift */; }; + F5298A16298A655700C5B85C /* emailApiModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A15298A655700C5B85C /* emailApiModel.swift */; }; + F5298A18298A656400C5B85C /* JoinApiModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A17298A656400C5B85C /* JoinApiModel.swift */; }; + F5298A1A298A657700C5B85C /* ChangePwModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A19298A657700C5B85C /* ChangePwModel.swift */; }; + F5298A1C298A661000C5B85C /* LoginResultModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A1B298A661000C5B85C /* LoginResultModel.swift */; }; + F5298A1E298A666700C5B85C /* FindPasswordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A1D298A666700C5B85C /* FindPasswordController.swift */; }; + F5298A21298A66A900C5B85C /* CheckAgreeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A20298A66A900C5B85C /* CheckAgreeController.swift */; }; + F5298A23298A66B700C5B85C /* CheckPageMarketingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A22298A66B700C5B85C /* CheckPageMarketingController.swift */; }; + F5298A25298A66C000C5B85C /* CheckPageServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A24298A66C000C5B85C /* CheckPageServiceController.swift */; }; + F5298A27298A66C800C5B85C /* CheckPagePrivacyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A26298A66C800C5B85C /* CheckPagePrivacyController.swift */; }; + F5298A29298A66F800C5B85C /* RegisterationSuccessController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A28298A66F800C5B85C /* RegisterationSuccessController.swift */; }; + F5298A2F298A6F1600C5B85C /* NanumSquareR.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F5298A2E298A6F1500C5B85C /* NanumSquareR.ttf */; }; + F5298A31298A6F1D00C5B85C /* NanumSquareB.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F5298A30298A6F1D00C5B85C /* NanumSquareB.ttf */; }; + F5298A34298A723800C5B85C /* MyPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A33298A723800C5B85C /* MyPageView.swift */; }; + F5298A36298A728D00C5B85C /* MyPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5298A35298A728D00C5B85C /* MyPageViewController.swift */; }; +>>>>>>> Stashed changes /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -68,6 +101,7 @@ 1A81FE00F91FA41642246A20 /* Pods_LGHTSG.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LGHTSG.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6F7EA128F8EC33ED812CADCA /* Pods-LGHTSG.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LGHTSG.release.xcconfig"; path = "Target Support Files/Pods-LGHTSG/Pods-LGHTSG.release.xcconfig"; sourceTree = ""; }; 9154F7534146417B8EBDBECC /* Pods-LGHTSG.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LGHTSG.debug.xcconfig"; path = "Target Support Files/Pods-LGHTSG/Pods-LGHTSG.debug.xcconfig"; sourceTree = ""; }; +<<<<<<< Updated upstream F51D92FD29803EB300DFC7E4 /* LoginModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginModel.swift; sourceTree = ""; }; F51D92FF29803EE700DFC7E4 /* emailCheckModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = emailCheckModel.swift; sourceTree = ""; }; F51D930129803F3D00DFC7E4 /* NanumSquareR.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = NanumSquareR.ttf; path = ../../../../../Downloads/NaverNanumSquare/NanumFontSetup_TTF_SQUARE/NanumSquareR.ttf; sourceTree = ""; }; @@ -100,6 +134,38 @@ F59B5F982985453D007F13CA /* JoinSuccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinSuccessView.swift; sourceTree = ""; }; F59B5F9B29854741007F13CA /* RegisterationSuccessController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterationSuccessController.swift; sourceTree = ""; }; F59B5F9D29854B89007F13CA /* user.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = user.swift; sourceTree = ""; }; +======= + F52989F3298A63FB00C5B85C /* login.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = login.swift; sourceTree = ""; }; + F52989F5298A640600C5B85C /* email.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = email.swift; sourceTree = ""; }; + F52989F7298A641300C5B85C /* join.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = join.swift; sourceTree = ""; }; + F52989F9298A641F00C5B85C /* user.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = user.swift; sourceTree = ""; }; + F52989FB298A642D00C5B85C /* changePw.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = changePw.swift; sourceTree = ""; }; + F52989FE298A645100C5B85C /* RegisterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterView.swift; sourceTree = ""; }; + F5298A00298A646600C5B85C /* JoinSuccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinSuccessView.swift; sourceTree = ""; }; + F5298A03298A64C300C5B85C /* CheckAgreeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckAgreeView.swift; sourceTree = ""; }; + F5298A05298A64CA00C5B85C /* CheckPageServiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPageServiceView.swift; sourceTree = ""; }; + F5298A07298A64D300C5B85C /* CheckPagePrivacyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPagePrivacyView.swift; sourceTree = ""; }; + F5298A09298A64DB00C5B85C /* CheckPageMarketingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPageMarketingView.swift; sourceTree = ""; }; + F5298A0B298A64FE00C5B85C /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; + F5298A0D298A651700C5B85C /* StartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartView.swift; sourceTree = ""; }; + F5298A0F298A652400C5B85C /* FindPwView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindPwView.swift; sourceTree = ""; }; + F5298A11298A653C00C5B85C /* LoginApiModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginApiModel.swift; sourceTree = ""; }; + F5298A13298A654B00C5B85C /* LoginApiHeaderModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginApiHeaderModel.swift; sourceTree = ""; }; + F5298A15298A655700C5B85C /* emailApiModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = emailApiModel.swift; sourceTree = ""; }; + F5298A17298A656400C5B85C /* JoinApiModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinApiModel.swift; sourceTree = ""; }; + F5298A19298A657700C5B85C /* ChangePwModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangePwModel.swift; sourceTree = ""; }; + F5298A1B298A661000C5B85C /* LoginResultModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginResultModel.swift; sourceTree = ""; }; + F5298A1D298A666700C5B85C /* FindPasswordController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindPasswordController.swift; sourceTree = ""; }; + F5298A20298A66A900C5B85C /* CheckAgreeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckAgreeController.swift; sourceTree = ""; }; + F5298A22298A66B700C5B85C /* CheckPageMarketingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPageMarketingController.swift; sourceTree = ""; }; + F5298A24298A66C000C5B85C /* CheckPageServiceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPageServiceController.swift; sourceTree = ""; }; + F5298A26298A66C800C5B85C /* CheckPagePrivacyController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPagePrivacyController.swift; sourceTree = ""; }; + F5298A28298A66F800C5B85C /* RegisterationSuccessController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterationSuccessController.swift; sourceTree = ""; }; + F5298A2E298A6F1500C5B85C /* NanumSquareR.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = NanumSquareR.ttf; path = ../../../../../Downloads/NaverNanumSquare/NanumFontSetup_TTF_SQUARE/NanumSquareR.ttf; sourceTree = ""; }; + F5298A30298A6F1D00C5B85C /* NanumSquareB.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = NanumSquareB.ttf; path = ../../../../../Downloads/NaverNanumSquare/NanumFontSetup_TTF_SQUARE/NanumSquareB.ttf; sourceTree = ""; }; + F5298A33298A723800C5B85C /* MyPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageView.swift; sourceTree = ""; }; + F5298A35298A728D00C5B85C /* MyPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageViewController.swift; sourceTree = ""; }; +>>>>>>> Stashed changes /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -154,6 +220,7 @@ 071E0554296BB8210020282F /* Model */ = { isa = PBXGroup; children = ( +<<<<<<< Updated upstream F51D92FF29803EE700DFC7E4 /* emailCheckModel.swift */, F51D92FD29803EB300DFC7E4 /* LoginModel.swift */, F5828A582982C15A00C870B3 /* LoginResultModel.swift */, @@ -162,6 +229,18 @@ F59B5F942984F98A007F13CA /* join.swift */, F59B5F9D29854B89007F13CA /* user.swift */, F526375829894532001CCCBE /* changePw.swift */, +======= + 078401D1298A49E200CDE061 /* asset.swift */, + 078401BE298A486300CDE061 /* realEstates.swift */, + 078401C0298A486300CDE061 /* ResellPrice.swift */, + 078401BF298A486300CDE061 /* StockPrice.swift */, + 078666BB2980BF9B000ADCBE /* ReverseModel.swift */, + 078666BD2983844D000ADCBE /* GeocodingModel.swift */, + 0764F26C2986653500F446CB /* AreaListModel.swift */, + 0764F2702987853600F446CB /* EstateModel.swift */, + F5298A1B298A661000C5B85C /* LoginResultModel.swift */, + F5298A32298A713000C5B85C /* login&join&changepw */, +>>>>>>> Stashed changes ); path = Model; sourceTree = ""; @@ -178,11 +257,23 @@ 071E0556296BB8380020282F /* ViewModel */ = { isa = PBXGroup; children = ( +<<<<<<< Updated upstream F5828A4829821B9900C870B3 /* LoginApiModel.swift */, F5828A4A2982B5F100C870B3 /* LoginApiHeaderModel.swift */, F5828A5C2983B34500C870B3 /* emailApiModel.swift */, F59B5F962984F9B5007F13CA /* JoinApiModel.swift */, F526375A298945D2001CCCBE /* ChangePwApiModel.swift */, +======= + F5298A11298A653C00C5B85C /* LoginApiModel.swift */, + F5298A13298A654B00C5B85C /* LoginApiHeaderModel.swift */, + 078401E4298A4B2C00CDE061 /* StockPriceModel.swift */, + 078401E5298A4B2D00CDE061 /* TableCellModel.swift */, + 078401D5298A49E300CDE061 /* AssetModel.swift */, + 078401C1298A486300CDE061 /* EstatePriceModel.swift */, + F5298A15298A655700C5B85C /* emailApiModel.swift */, + F5298A17298A656400C5B85C /* JoinApiModel.swift */, + F5298A19298A657700C5B85C /* ChangePwModel.swift */, +>>>>>>> Stashed changes ); path = ViewModel; sourceTree = ""; @@ -197,12 +288,27 @@ 071E0558296BB8510020282F /* View */ = { isa = PBXGroup; children = ( +<<<<<<< Updated upstream F59B5F9A2985454C007F13CA /* with RegisterView */, 07557562296BFCD300B8AF77 /* Cell.swift */, F51D930529803FBA00DFC7E4 /* LoginView.swift */, F588D50E2980FDDF00D4E588 /* StartView.swift */, F588D5102981096A00D4E588 /* FindPwView.swift */, F5828A542982BCCB00C870B3 /* MyPageView.swift */, +======= + F5298A02298A64B500C5B85C /* CheckView */, + F52989FD298A643E00C5B85C /* with RegisterView */, + 078401CF298A49DB00CDE061 /* New Group1 */, + 078401C8298A49CB00CDE061 /* New Group */, + 0791E9282984B395008BDEAB /* EstateSaleCell.swift */, + 0764F26A298642EF00F446CB /* SearchItemCell.swift */, + 078401A6298A481A00CDE061 /* EstateSaleCell.swift */, + 0764F284298959C600F446CB /* TopViewCell.swift */, + F5298A0B298A64FE00C5B85C /* LoginView.swift */, + F5298A0D298A651700C5B85C /* StartView.swift */, + F5298A0F298A652400C5B85C /* FindPwView.swift */, + F5298A33298A723800C5B85C /* MyPageView.swift */, +>>>>>>> Stashed changes ); path = View; sourceTree = ""; @@ -210,8 +316,13 @@ 071E0559296BB86E0020282F /* Font */ = { isa = PBXGroup; children = ( +<<<<<<< Updated upstream F51D930129803F3D00DFC7E4 /* NanumSquareR.ttf */, F51D930329803F4500DFC7E4 /* NanumSquareB.ttf */, +======= + F5298A2E298A6F1500C5B85C /* NanumSquareR.ttf */, + F5298A30298A6F1D00C5B85C /* NanumSquareB.ttf */, +>>>>>>> Stashed changes ); path = Font; sourceTree = ""; @@ -219,6 +330,7 @@ 071E055A296BB88B0020282F /* Controller */ = { isa = PBXGroup; children = ( + F5298A1F298A669C00C5B85C /* CheckController */, 0755755A296BFC2100B8AF77 /* Authentication */, 07557560296BFC5900B8AF77 /* MainTabController.swift */, F5828A522982BC7500C870B3 /* MyPageController.swift */, @@ -234,7 +346,13 @@ children = ( 0755755B296BFC3300B8AF77 /* LoginController.swift */, 0755755E296BFC4B00B8AF77 /* RegisterationController.swift */, +<<<<<<< Updated upstream F59B5F9B29854741007F13CA /* RegisterationSuccessController.swift */, +======= + F5298A28298A66F800C5B85C /* RegisterationSuccessController.swift */, + F5298A1D298A666700C5B85C /* FindPasswordController.swift */, + F5298A35298A728D00C5B85C /* MyPageViewController.swift */, +>>>>>>> Stashed changes ); path = Authentication; sourceTree = ""; @@ -256,6 +374,7 @@ name = Frameworks; sourceTree = ""; }; +<<<<<<< Updated upstream F5828A4C2982BBA700C870B3 /* CheckView */ = { isa = PBXGroup; children = ( @@ -284,10 +403,54 @@ F588D514298122A100D4E588 /* RegisterView.swift */, F59B5F982985453D007F13CA /* JoinSuccessView.swift */, F5828A4C2982BBA700C870B3 /* CheckView */, +======= + F52989FD298A643E00C5B85C /* with RegisterView */ = { + isa = PBXGroup; + children = ( + F52989FE298A645100C5B85C /* RegisterView.swift */, + F5298A00298A646600C5B85C /* JoinSuccessView.swift */, +>>>>>>> Stashed changes ); path = "with RegisterView"; sourceTree = ""; }; +<<<<<<< Updated upstream +======= + F5298A02298A64B500C5B85C /* CheckView */ = { + isa = PBXGroup; + children = ( + F5298A03298A64C300C5B85C /* CheckAgreeView.swift */, + F5298A05298A64CA00C5B85C /* CheckPageServiceView.swift */, + F5298A07298A64D300C5B85C /* CheckPagePrivacyView.swift */, + F5298A09298A64DB00C5B85C /* CheckPageMarketingView.swift */, + ); + path = CheckView; + sourceTree = ""; + }; + F5298A1F298A669C00C5B85C /* CheckController */ = { + isa = PBXGroup; + children = ( + F5298A20298A66A900C5B85C /* CheckAgreeController.swift */, + F5298A22298A66B700C5B85C /* CheckPageMarketingController.swift */, + F5298A24298A66C000C5B85C /* CheckPageServiceController.swift */, + F5298A26298A66C800C5B85C /* CheckPagePrivacyController.swift */, + ); + path = CheckController; + sourceTree = ""; + }; + F5298A32298A713000C5B85C /* login&join&changepw */ = { + isa = PBXGroup; + children = ( + F52989F3298A63FB00C5B85C /* login.swift */, + F52989F5298A640600C5B85C /* email.swift */, + F52989F7298A641300C5B85C /* join.swift */, + F52989FB298A642D00C5B85C /* changePw.swift */, + F52989F9298A641F00C5B85C /* user.swift */, + ); + path = "login&join&changepw"; + sourceTree = ""; + }; +>>>>>>> Stashed changes /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -356,9 +519,15 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( +<<<<<<< Updated upstream 071E054D296BB7B70020282F /* LaunchScreen.storyboard in Resources */, F51D930229803F3D00DFC7E4 /* NanumSquareR.ttf in Resources */, F51D930429803F4500DFC7E4 /* NanumSquareB.ttf in Resources */, +======= + 078401C7298A496B00CDE061 /* LaunchScreen.storyboard in Resources */, + F5298A2F298A6F1600C5B85C /* NanumSquareR.ttf in Resources */, + F5298A31298A6F1D00C5B85C /* NanumSquareB.ttf in Resources */, +>>>>>>> Stashed changes 071E054A296BB7B70020282F /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -412,6 +581,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( +<<<<<<< Updated upstream 071E0545296BB7B50020282F /* ViewController.swift in Sources */, F51D930029803EE700DFC7E4 /* emailCheckModel.swift in Sources */, 0755755C296BFC3300B8AF77 /* LoginController.swift in Sources */, @@ -436,6 +606,46 @@ F59B5F9C29854741007F13CA /* RegisterationSuccessController.swift in Sources */, F5828A552982BCCB00C870B3 /* MyPageView.swift in Sources */, F588D51D2981605D00D4E588 /* CheckPagePrivacyView.swift in Sources */, +======= + 078401DB298A49E300CDE061 /* asset.swift in Sources */, + 0783C0FA297034FA00EDABA3 /* EstateController.swift in Sources */, + 078401DA298A49E300CDE061 /* ChartMarker.swift in Sources */, + 0764F285298959C600F446CB /* TopViewCell.swift in Sources */, + F5298A1A298A657700C5B85C /* ChangePwModel.swift in Sources */, + F5298A12298A653C00C5B85C /* LoginApiModel.swift in Sources */, + 078401C2298A486300CDE061 /* realEstates.swift in Sources */, + 078401B8298A484800CDE061 /* StockChartViewController.swift in Sources */, + 078401DF298A49E300CDE061 /* AssetModel.swift in Sources */, + 078401DE298A49E300CDE061 /* UnderlineSegmentedControl.swift in Sources */, + 078401B7298A484800CDE061 /* EstateController.swift in Sources */, + 078401BC298A484800CDE061 /* ChartViewController.swift in Sources */, + F52989FC298A642D00C5B85C /* changePw.swift in Sources */, + 0791E9292984B395008BDEAB /* EstateSaleCell.swift in Sources */, + 078401C5298A486300CDE061 /* EstatePriceModel.swift in Sources */, + F5298A36298A728D00C5B85C /* MyPageViewController.swift in Sources */, + 078401BB298A484800CDE061 /* HomeViewController.swift in Sources */, + 071E0545296BB7B50020282F /* ViewController.swift in Sources */, + F5298A34298A723800C5B85C /* MyPageView.swift in Sources */, + 0764F2712987853600F446CB /* EstateModel.swift in Sources */, + 078401CE298A49D500CDE061 /* resellView.swift in Sources */, + 0755755C296BFC3300B8AF77 /* LoginController.swift in Sources */, + 078401DD298A49E300CDE061 /* StockDateSegmentControl.swift in Sources */, + 078401BD298A484800CDE061 /* ExploreViewController.swift in Sources */, + F5298A25298A66C000C5B85C /* CheckPageServiceController.swift in Sources */, + 078401CC298A49D500CDE061 /* StockView.swift in Sources */, + F5298A1E298A666700C5B85C /* FindPasswordController.swift in Sources */, + 078401E3298A49E300CDE061 /* UnderlineView.swift in Sources */, + 078401E1298A49E300CDE061 /* HomeTableCell.swift in Sources */, + 0764F26B298642EF00F446CB /* SearchItemCell.swift in Sources */, + F5298A08298A64D300C5B85C /* CheckPagePrivacyView.swift in Sources */, + F5298A0A298A64DB00C5B85C /* CheckPageMarketingView.swift in Sources */, + F5298A18298A656400C5B85C /* JoinApiModel.swift in Sources */, + F5298A1C298A661000C5B85C /* LoginResultModel.swift in Sources */, + F5298A04298A64C300C5B85C /* CheckAgreeView.swift in Sources */, + F5298A10298A652400C5B85C /* FindPwView.swift in Sources */, + 078401E7298A4B2D00CDE061 /* TableCellModel.swift in Sources */, + 078401E9298A4C2600CDE061 /* TopViewController.swift in Sources */, +>>>>>>> Stashed changes 071E0541296BB7B50020282F /* AppDelegate.swift in Sources */, F51D930629803FBA00DFC7E4 /* LoginView.swift in Sources */, F59B5F9E29854B89007F13CA /* user.swift in Sources */, @@ -444,8 +654,37 @@ F5828A572982BDA600C870B3 /* FindPasswordController.swift in Sources */, F588D51929814A5400D4E588 /* CheckAgreeController.swift in Sources */, 071E0543296BB7B50020282F /* SceneDelegate.swift in Sources */, +<<<<<<< Updated upstream F5828A5D2983B34500C870B3 /* emailApiModel.swift in Sources */, F588D5232981615A00D4E588 /* CheckPagePrivacyController.swift in Sources */, +======= + F5298A16298A655700C5B85C /* emailApiModel.swift in Sources */, + F5298A0E298A651700C5B85C /* StartView.swift in Sources */, + 0764F26F29866A6500F446CB /* APIToken.swift in Sources */, + 078401C4298A486300CDE061 /* ResellPrice.swift in Sources */, + 078401AA298A481A00CDE061 /* EstateSaleCell.swift in Sources */, + F5298A23298A66B700C5B85C /* CheckPageMarketingController.swift in Sources */, + 078401B9298A484800CDE061 /* ChartsModel.swift in Sources */, + F52989F4298A63FB00C5B85C /* login.swift in Sources */, + F5298A29298A66F800C5B85C /* RegisterationSuccessController.swift in Sources */, + 078401E6298A4B2D00CDE061 /* StockPriceModel.swift in Sources */, + F5298A01298A646600C5B85C /* JoinSuccessView.swift in Sources */, + F5298A27298A66C800C5B85C /* CheckPagePrivacyController.swift in Sources */, + 078401CD298A49D500CDE061 /* EstateDetailCell.swift in Sources */, + 078666BC2980BF9B000ADCBE /* ReverseModel.swift in Sources */, + F52989FF298A645100C5B85C /* RegisterView.swift in Sources */, + F5298A14298A654B00C5B85C /* LoginApiHeaderModel.swift in Sources */, + F52989FA298A641F00C5B85C /* user.swift in Sources */, + F5298A21298A66A900C5B85C /* CheckAgreeController.swift in Sources */, + F52989F8298A641300C5B85C /* join.swift in Sources */, + F5298A0C298A64FE00C5B85C /* LoginView.swift in Sources */, + 078401B6298A484800CDE061 /* MainTabController.swift in Sources */, + 078401C3298A486300CDE061 /* StockPrice.swift in Sources */, + 078666BE2983844D000ADCBE /* GeocodingModel.swift in Sources */, + F5298A06298A64CA00C5B85C /* CheckPageServiceView.swift in Sources */, + 0764F26D2986653500F446CB /* AreaListModel.swift in Sources */, + F52989F6298A640600C5B85C /* email.swift in Sources */, +>>>>>>> Stashed changes 0755755F296BFC4B00B8AF77 /* RegisterationController.swift in Sources */, F5828A532982BC7500C870B3 /* MyPageController.swift in Sources */, F5828A4B2982B5F100C870B3 /* LoginApiHeaderModel.swift in Sources */, @@ -630,7 +869,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.Ha.LGHTSG; + PRODUCT_BUNDLE_IDENTIFIER = com.kry.LGHTSG; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; diff --git a/LGHTSG/LGHTSG/App/SceneDelegate.swift b/LGHTSG/LGHTSG/App/SceneDelegate.swift index 64e4d8e..67c0d15 100644 --- a/LGHTSG/LGHTSG/App/SceneDelegate.swift +++ b/LGHTSG/LGHTSG/App/SceneDelegate.swift @@ -17,6 +17,11 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window = UIWindow(windowScene: windowscene) window?.backgroundColor = .systemBackground window?.rootViewController = ViewController() +<<<<<<< Updated upstream +======= + // window?.rootViewController = UINavigationController(rootViewController: MainTabController()) + +>>>>>>> Stashed changes window?.tintColor = .label window?.makeKeyAndVisible() } diff --git a/LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/Contents.json new file mode 100644 index 0000000..fe21d4b --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "로그아웃_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "로그아웃_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "로그아웃_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/\353\241\234\352\267\270\354\225\204\354\233\203_1x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/\353\241\234\352\267\270\354\225\204\354\233\203_1x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8e4971c429657dd6f6e7fea5685c0364322c6ebe GIT binary patch literal 791 zcmV+y1L*vTP)bq|Mwe>$C9%d#Blj`04yR;z_- zovmJ$%jGufFl?OQpl|B;dcF3}=kue;wl4O})Q`<(LqI+3b0nAmVES1BkYszm-~YgC zSSS=G*c&q;#A(AfT`U&eX0tg=B!h)tuLVSa0frmH7vp(OTQAx3H5M=I0u&D&!T$s> z9^QK(T5vFIBySk*|Y zZV1-zj>jW^hvJGc5eyDxSSppCs?}-?VjRe>jYRMCy|#AP6oV_STOe{;rBZPa?@~SG zqqOk+)Yq}HVD^jdqkK84Y9aXm72sWYM9eXgB333zWsJ(@^6;Nzq>YgMFdd?ZMNR{2 z7kPp8#2x_u^}oH4-TT+FyMR>$!7&15=oc0{^Gc&Z|YA%;tk)VHzU2a8?hN79s7m==Tg!<-}0 zh&{#g0C}1B^>1aM%|Af1dVU^*R49kUVbnIi6}#Pzx}U(s%j-glsjXQioTwUzh*6P% zO#$E^DrM_>qT9L?au6R+8n>J~qQ}oy=(k8*++4K>B z1mlUErYbCfKZsWtyBw-AkQfHQ=CIT0Yivj&KxYVZ#$*?nA!t|sAikBcOF@PnF!~_S z6EAm&U9N+NawVyK+^>+bv)~wucVHmLm4Jg3A1xAEL*N{Sw)|^!`G8yen;|}k{RVt{ VeMe>dwtxTt002ovPDHLkV1k;4Xm9`k literal 0 HcmV?d00001 diff --git "a/LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/\353\241\234\352\267\270\354\225\204\354\233\203_2x.png" "b/LGHTSG/LGHTSG/Assets.xcassets/btn/logout-btn.imageset/\353\241\234\352\267\270\354\225\204\354\233\203_2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..586535e1d5cac3b0490b10eaceb7a6b7e30b7b3d GIT binary patch literal 1408 zcmV-`1%LX9P)IVqg5e{*vq zr>Cbry4y=jOZ}wzVuHbdLrmgH1?25AtkJ5v20n5>?V}7R3@~8_wClLKx;8I9+8)OD zE3V2Dk>iS7EWODMRR(+`$xzWm3qj19o_JpufRBes6;*msK=}CJcfx-`&St z%`AGgByDU8YSb5fr-no}SxhjHbXP_Ib|^KikYMs&J`FU1xa{W9(R|6H*&y>f%gf8{ z$UMF^51G@G5pi{On0d!2hOW&LJByjVUqlAAsrjkYLMS9AvWf9tUZ3uL z6!In-&DtR~63pJK)oOH$L!qh3qgCPieMD>M6v5ryogbYyCKwE+iZ^6JL9<{9Ce^fH zBL&6;Va$S505ot*y*&!YL!;N(QnxsyVV{U>UJ51AgMD+R%ywLoOoTzvpi#Z1UDML& zC>*TUq=~dlTMYUeHEMfiX6C=N_s9$|F|aNp052KH7+`Ayt^;`iFb0Y|`kY3qE;5^) z0T=?NEhrM;hO}8f7M_*q5Ig)Izg>l*cVd^7|fMy4p9>`DYw#yk#^}B+gi3xQ5Cl7!P=KuwCb{kjAy`y zu}#Ai4fL3X@szwbuJ521hP8Tn`@O`_$*IS{qoJnyJkY`P%$yX{Fwh#4RAoy30{4BL z$CD?M$N;Z$b~y*3K(b=0ButE8>=>a4;2bpJJ#{VbDKvvt7aV-yj0-IEesiZ9N%yL6TrrV zD80rG&O$%QjdtW6F%&gr=ASX>CjB#}N1@nbRa+Q%cf z$t|g61oWv=S!zqN+I{-|TQzd1G_J0$`s(q^%gfgK`g%wf(eL-Yr>7_H_4U=$zpK@1 zA=(EkD=R(9h&nk`8W>!UECXa(e0+S|0co~pW@dcsFD9LfbB3SS*Vp{f!}A1aJ2fF& zjT}k?ON40P=H}+YrKP0-WdsKGRXu)weqJgfx$f@n_96XRAjl#WLx4W*p-*Ab35n!F zr%v$UQMu@02K>l!!OhK$PbDL-8ergmYvSWOW_TlJ0QsIh3`#p~P_+A5A(u$2pV;-u zBGAv)^73*!?z=R#=u`RR$_xzHFDf5hY4yWgvxE z0SNLh+g7u)vrPU$Bw>Y+9#p3XX~)-Ylg0`3vxUB#qc4GeV`p<&fEdKTv1_bqWKd`t z1iQVx-4SxA2p|Rb(xjk}tS8$UwgZvOhoq1UeL2F%hJJk_xxnNeE(*ym_|I?9CxS>U zmZl@b!v8nG|Hp$8Vt*0)+;2}khY5ChdHHv3ZLLEkB8FIOj%-m5;JPj*MW|_z#>K^j zrxP`iT$oY2WEsNx6Do#G>dFKd{B8VMJCp+;*2pXt9M|jhmTtgv|M6Q#sx1bUa|nWV z^BDW4;NQdV{(lUzol*g?3PfK*Qu>Yl@_wkE_uixDK0G||`7Qcnm?4MU0I__nDTE!9s^ZuSg(MlVvq0=kDiN%r)niD@ zZ7KksR5Y&Q$0V;KR{^j()tUm6Fagw3S8MXwGozA#=RDJY57PRlkR%g06eKpLiZCv8 zlc*M>lmOYqKM5}ShlHLk!5|vhGE6|-W`Sz->CGdv4zZB}QbG}I25^)fBs+s7J4aIw zc2lUv--Ph2wi`HS6O&>mE=7d4*jQyExp2c49^gAUq+!JK#o!nRUNIo&YHEi)N-7Zu z-0q6R8F^+VS>(*%`zXyr(XpH}jN7SBK?D%)2fW?bN#WFDJpNJ+WbycPJ19;f*aSZt zRM&>sdm$AE2Vb|+!YD3?`UX!uh%-)YgMTAV5=;Wr(=Vv9v3ApHiPhEB7SvsbRifC8 zzGo6u4XTs63E?LAh2Jy4OMwNs}*sg4>3L6sW_4t@SG1dcRe0q5j z?^z^QXu{Ty2>h|%)Z?#4`n*Z{NpNa020Ux2x)>&x^~QyTg<;z?szyxV$n^$KJ>Uuf zswfbo-A%Ktrc^az1m`Wj!BY?Ns>O_fP|wD1RvE^Ui#-b%e&5JG&dbObnnG%pM%vhT zHN2e9^P+?M`+Fvr5lM7AugcOgFS4k`29;MX)1`L;vJhi^%HS1+q>xLJ-_*ix)Kv zirg=)Sa4ukEU3p`vJ@HO+Fa3aTY!Pw(1Mv+qU>kr>%P+Dv$vKuAR@I6wdPWCitmj? za!F0n0U1DFL{P@sy0QRiqbJkR7A-=^vc=1+5QuHC zCmMYx`O03Elm8&SUL5L8@_y4WG~S?VJN!}#%84SOh?skY(V9A5%!vUyqKe=>ykOh! zibw)T#7o}dOoR{A$|qL+v9!WOK4z~s zYGcO)6FhYl81Bibt5aMzmcnx6syK>}OR7@YQEMhG!iY#UKR@3|ss@q!>`!=~Mu@Eq zX%uEb%=$p9S39% zkK)P2WC|%m1&HB&89}sD)5WfXgDunxRxUbJ9Fi}57cciebrsT`b5GB600000NkvXX Hu0mjfgA8!n literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/mypage/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/mypage/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/mypage/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Contents.json new file mode 100644 index 0000000..1c8c5cf --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 141_1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 141_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 141_3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Group 141_1x.png b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Group 141_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..5425d8d7928bd0e560361f1219c4b4d8b3327b63 GIT binary patch literal 1078 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Group 141_3x.png b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage1.imageset/Group 141_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8a89e4a584b11361d2425f7914f679a8cf63241a GIT binary patch literal 3379 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Contents.json b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Contents.json new file mode 100644 index 0000000..f3b838c --- /dev/null +++ b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 142__1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 142__2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 142__3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Group 142__1x.png b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Group 142__1x.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4d63b2ad21036064250fd3edc020b77f9dff94 GIT binary patch literal 864 zcmeAS@N?(olHy`uVBq!ia0y~yU~~bp4LI0NGGGYH!KsH=Z1;DZ-V^%y2`WnSq5xkU_?gg~45b@qnNULjfsV?&psmE9=ajJ$u?E z`O^o_o;`bpxw5)?v)9r|w)WQ6o8P|8-Mw$$yq{LL_U+y+9k=@S+o+Wxn~HYkFie|o z_r1TrzpSuO(C)wH6C*{fq@dMTmraXXKmG0EW?Osv?SKFN&H3*c9v)s+QAUapIo8zI`+w7CYxwfzXP8JbPq1%Sv2}YzMTLaYiVH749y{i?&3B_ruUjO~;-rld zby^D;rbYK8o$@r?uAo)$>#_QDkA73utV@?IkAAGksjjXLzHL4CT>bi$9bm8 zoYpTDDdt|Z@6$1D*ZJ!uGH3H`xS7*-LbGd@kb0&q!B{=$>sQl1 z>#k*5H_T7`w7O`H*yl+$9qjDvH;+y^>6+LxdGWm0dmg=fnOU*!uc*&n%_?UOr4Pnu zx)SGw&zj5@7+)^BH_|-(waucuOV>nJd~Vm**Dot75;|vl@BV%D{mHTiYL@mb{B!Tt ztzX&qed8NzaOf literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Group 142__2x.png b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage2.imageset/Group 142__2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2c951bd3c681371a9d8dedefe2c80cf07255c0d9 GIT binary patch literal 1675 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 literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage3.imageset/Group 143__3x.png b/LGHTSG/LGHTSG/Assets.xcassets/mypage/mypage3.imageset/Group 143__3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1223b4411ffcf7e1ca9cb13a4c10c66f3455ef89 GIT binary patch literal 3267 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 LZVr_veF*;sJ{0Rl literal 0 HcmV?d00001 diff --git a/LGHTSG/LGHTSG/Controller/Authentication/FindPasswordController.swift b/LGHTSG/LGHTSG/Controller/Authentication/FindPasswordController.swift new file mode 100644 index 0000000..83c9c58 --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/Authentication/FindPasswordController.swift @@ -0,0 +1,56 @@ +import UIKit + +class FindPassWordController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + let FindPwView = FindPwView() + self.view.addSubview(FindPwView) + view.backgroundColor = .black + + + FindPwView.translatesAutoresizingMaskIntoConstraints = false + FindPwView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + FindPwView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + FindPwView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + FindPwView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(FindPwView.navigationBar) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + FindPwView.navigationBar.tintColor = UIColor.white + FindPwView.navigationBar.standardAppearance = navigationAppearance + FindPwView.navigationBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + FindPwView.navigationBar.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + FindPwView.navigationBar.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + let navItem = UINavigationItem(title: "비밀번호 찾기") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + + FindPwView.navigationBar.setItems([navItem], animated: true) + + // MARK: 키보드 올라갔을 때 화면 터치해서 내려가게함 + let tapGesture = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:))) + self.view.addGestureRecognizer(tapGesture) + } + + @objc func tapDismissButton(){ + var userId = UserDefaults.standard.string(forKey: "id") + var pw = UserDefaults.standard.string(forKey: "pw") + + print("id : \(userId), pw : \(pw)") + self.presentingViewController?.dismiss(animated: true) + } + + + + +} diff --git a/LGHTSG/LGHTSG/Controller/Authentication/LoginController.swift b/LGHTSG/LGHTSG/Controller/Authentication/LoginController.swift index 317557b..657532e 100644 --- a/LGHTSG/LGHTSG/Controller/Authentication/LoginController.swift +++ b/LGHTSG/LGHTSG/Controller/Authentication/LoginController.swift @@ -6,13 +6,290 @@ // import UIKit +import SnapKit +import Alamofire + + class LoginController: UIViewController { +<<<<<<< Updated upstream +======= + + + let titleImageView2: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "icon") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let privacyPolicyLabel: UILabel = { + let label = UILabel() + label.text = "개인정보처리방침" + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 13.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + let memberInquiryLabel: UILabel = { + let label = UILabel() + label.text = "회원 정보 문의 : admin@rghtsg.com" + label.textColor = .lightGray + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + let emailTextField: UITextField = { + let email = UITextField() + email.layer.cornerRadius = 5 + email.leftViewMode = .always + email.attributedPlaceholder = NSAttributedString(string: "이메일", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + email.textColor = .white + email.font = UIFont(name: "NanumSquareR", size: 15.0) + email.borderStyle = .none + email.enablesReturnKeyAutomatically = true + email.translatesAutoresizingMaskIntoConstraints = false + return email + }() + + + let passwordTextField: UITextField = { + let password = UITextField() + password.layer.cornerRadius = 5 + password.leftViewMode = .always + password.attributedPlaceholder = NSAttributedString(string: "비밀번호", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) + password.borderStyle = .none + password.textColor = .white // 글자색을 흰색으로 + password.isSecureTextEntry = true + password.font = UIFont(name: "NanumSquareR", size: 15.0) + password.translatesAutoresizingMaskIntoConstraints = false + return password + }() + + let emailImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let pwImageView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let loginBtn2: UIButton = { + let btn = UIButton() + btn.setBackgroundImage(UIImage(named: "login-btn2"), for: .normal) + btn.addTarget(self, action: #selector(loginBtnClicked), for: .touchUpInside) + + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let joinBtn2: UIButton = { + let btn = UIButton() + btn.setTitle("회원가입", for: .normal) + btn.setTitleColor(.white, for: .normal) + btn.titleLabel?.font = UIFont(name: "NanumSquareR", size: 12.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + let findPwBtn2: UIButton = { + let btn = UIButton() + btn.setTitle("비밀번호 찾기", for: .normal) + btn.setTitleColor(.white, for: .normal) + btn.titleLabel?.font = UIFont(name: "NanumSquareR", size: 12.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let middleLabel2: UILabel = { + let label = UILabel() + label.text = "|" + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textAlignment = .center + label.textColor = .white + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let loginWrongLabel: UILabel = { + let label = UILabel() + label.text = "없는 아이디거나 비밀번호가 틀렸습니다." + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .systemRed + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + let login = LoginApiModel() + let loginMsgCode = LoginApiHeaderModel() + var jwt : String = "" + var msgCode : Int = 0 + var result = LoginResult(jwt: "") + + @objc func loginBtnClicked(){ + + guard let email = emailTextField.text else {return} + guard let password = passwordTextField.text else {return} + + + let bodyData : Parameters = [ + "email" : email, + "password" : password + ] + + login.requestLoginDataModel(bodyData: bodyData){ + data in + self.jwt = data.jwt + print(data) + let vc = MainTabController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + var loginSuccess = UserDefaults.standard.bool(forKey: "loginSuccess") + loginSuccess = UserDefaults.standard.bool(forKey: "loginSuccess") + print(loginSuccess) + + + if jwt == "" { + print("로그인안됨") + loginWrongheight.isActive = false + } + else { + loginWrongheight.isActive = true + + } + + + } + + + // MARK: 로그인 관련 동적라벨 + var loginWrongheight: NSLayoutConstraint! + + + func setAutoLayout(){ + loginWrongheight = loginWrongLabel.heightAnchor.constraint(equalToConstant: 0) + loginWrongheight.isActive = true + + view.addSubview(titleImageView2) + + view.addSubview(emailImageView) + view.addSubview(emailTextField) + + view.addSubview(pwImageView) + view.addSubview(passwordTextField) + view.addSubview(loginWrongLabel) + + view.addSubview(loginBtn2) + view.addSubview(joinBtn2) + view.addSubview(middleLabel2) + view.addSubview(findPwBtn2) + + + view.addSubview(privacyPolicyLabel) + view.addSubview(memberInquiryLabel) + + + // MARK: 맨 위 이미지 위치 + self.titleImageView2.snp.makeConstraints { + $0.top.equalToSuperview().offset(170) + $0.centerX.equalToSuperview() + } + + self.emailImageView.snp.makeConstraints { + $0.top.equalTo(titleImageView2.snp.bottom).offset(100) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + self.emailTextField.snp.makeConstraints { + $0.top.equalTo(titleImageView2.snp.bottom).offset(115) + $0.left.equalToSuperview().offset(50) + $0.right.equalToSuperview().offset(-30) + } + + + + // MARK: 비밀번호 위치 및 배경 + // 나중에 에러 메세지 위치랑 고려해서 바꿔야함 + self.pwImageView.snp.makeConstraints { + $0.top.equalTo(emailImageView.snp.bottom).offset(20) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + self.passwordTextField.snp.makeConstraints { + $0.top.equalTo(emailImageView.snp.bottom).offset(35) + $0.left.equalToSuperview().offset(50) + $0.right.equalToSuperview().offset(-30) + } + + self.loginWrongLabel.snp.makeConstraints{ + $0.top.equalTo(pwImageView.snp.bottom).offset(5) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + + // MARK: 로그인 버튼 + self.loginBtn2.snp.makeConstraints { + $0.top.equalTo(pwImageView.snp.bottom).offset(40) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + + // MARK: 회원가입 및 비밀번호 찾기 + self.middleLabel2.snp.makeConstraints{ + $0.top.equalTo(loginBtn2.snp.bottom).offset(25) + $0.centerX.equalTo(loginBtn2) + } + + self.joinBtn2.snp.makeConstraints{ + $0.top.equalTo(loginBtn2.snp.bottom).offset(20) + $0.right.equalTo(middleLabel2.snp.left).offset(-20) + } + + + self.findPwBtn2.snp.makeConstraints{ + $0.top.equalTo(loginBtn2.snp.bottom).offset(20) + $0.left.equalTo(middleLabel2.snp.right).offset(20) + } + + + // MARK: 맨 밑 글자 위치 + self.memberInquiryLabel.snp.makeConstraints{ + $0.centerX.equalToSuperview() + $0.top.equalTo(privacyPolicyLabel.snp.bottom).offset(5) + } + + self.privacyPolicyLabel.snp.makeConstraints{ + $0.centerX.equalToSuperview() + $0.bottom.equalToSuperview().offset(-100) + + } + } + +>>>>>>> Stashed changes override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .black +<<<<<<< Updated upstream // MARK: 뷰 설정하기 let LoginView = LoginView() @@ -25,17 +302,29 @@ class LoginController: UIViewController { LoginView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true +======= + setAutoLayout() + +>>>>>>> Stashed changes // MARK: 옆으로 넘기면 뒤로 갈 수 있게 let swipeleft = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(infoviewSwipeLeft)) swipeleft.edges = .left swipeleft.delegate = self self.view.addGestureRecognizer(swipeleft) +<<<<<<< Updated upstream // MARK: 화면 이동을 위한 addTarget LoginView.findPwBtn2.addTarget(self, action: #selector(findPwClicked), for: .touchUpInside) LoginView.joinBtn2.addTarget(self, action: #selector(joinBtnClicked), for: .touchUpInside) +======= + + + // MARK: 화면 이동을 위한 addTarget + findPwBtn2.addTarget(self, action: #selector(findPwClicked), for: .touchUpInside) + joinBtn2.addTarget(self, action: #selector(joinBtnClicked), for: .touchUpInside) +>>>>>>> Stashed changes // MARK: 키보드 올라갔을 때 화면 터치해서 내려가게함 let tapGesture = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:))) @@ -46,6 +335,7 @@ class LoginController: UIViewController { // MARK: 키보드가 화면을 가릴 때 화면을 위로 올릴 수 있도록 NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(sender:)), name: UIResponder.keyboardWillShowNotification, object: nil); NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(sender:)), name: UIResponder.keyboardWillHideNotification, object: nil); +<<<<<<< Updated upstream } @objc func infoviewSwipeLeft(){ @@ -71,6 +361,33 @@ class LoginController: UIViewController { @objc func keyboardWillHide(sender: NSNotification) { print("키보드 내려감") +======= + } + + + @objc func infoviewSwipeLeft(){ + self.presentingViewController?.dismiss(animated: true) + } + + @objc func findPwClicked(){ + let vc = FindPassWordController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + @objc func joinBtnClicked(){ + let vc = CheckAgreeController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + // 키보드때문에 화면이 가려질 경우 화면을 올린다 + @objc func keyboardWillShow(sender: NSNotification) { + self.view.frame.origin.y = -100 // Move view 150 points upward + } + + @objc func keyboardWillHide(sender: NSNotification) { +>>>>>>> Stashed changes self.view.frame.origin.y = 0 // Move view to original position } } diff --git a/LGHTSG/LGHTSG/Controller/Authentication/MyPageViewController.swift b/LGHTSG/LGHTSG/Controller/Authentication/MyPageViewController.swift new file mode 100644 index 0000000..c84e9dc --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/Authentication/MyPageViewController.swift @@ -0,0 +1,57 @@ +// +// MyPageViewController.swift +// LGHTSG +// +// Created by 홍수정 on 2023/02/01. +// + +import UIKit + +class MyPageViewController: UIViewController { + + + @objc func tapDismissButton(){ + self.presentingViewController?.dismiss(animated: true) + } + + override func viewDidLoad() { + super.viewDidLoad() + + let MyPageView = MyPageView() + self.view.addSubview(MyPageView) + view.backgroundColor = .black + + + MyPageView.translatesAutoresizingMaskIntoConstraints = false + MyPageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + MyPageView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + MyPageView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + MyPageView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + // MARK: 네비게이션 컨트롤러 + self.view.addSubview(MyPageView.navigationBar7) + let safeArea = self.view.safeAreaLayoutGuide + let navigationAppearance = UINavigationBarAppearance() + + navigationAppearance.backgroundColor = .black + navigationAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] + MyPageView.navigationBar7.tintColor = UIColor.white + MyPageView.navigationBar7.standardAppearance = navigationAppearance + MyPageView.navigationBar7.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + MyPageView.navigationBar7.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true + MyPageView.navigationBar7.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true + + + let navItem = UINavigationItem(title: "마이페이지") + let leftButton = UIBarButtonItem(image: UIImage(named: "back-arrow"), style: .plain, target: self, action: #selector(tapDismissButton)) + + navItem.leftBarButtonItem = leftButton + + MyPageView.navigationBar7.setItems([navItem], animated: true) + } + + +} + + diff --git a/LGHTSG/LGHTSG/Controller/Authentication/RegisterationController.swift b/LGHTSG/LGHTSG/Controller/Authentication/RegisterationController.swift index b52cf97..82c04db 100644 --- a/LGHTSG/LGHTSG/Controller/Authentication/RegisterationController.swift +++ b/LGHTSG/LGHTSG/Controller/Authentication/RegisterationController.swift @@ -6,6 +6,7 @@ // import UIKit +import Alamofire class RegisterationController: UIViewController { @@ -91,7 +92,56 @@ class RegisterationController: UIViewController { // MARK: 화면 전환이나 실행함수 +<<<<<<< Updated upstream RegisterView.nextBtn.addTarget(self, action: #selector(nextBtnClicked), for: .touchUpInside) +======= + RegisterView.nextBtn.addTarget(self, action: #selector(joinBtnClicked2), for: .touchUpInside) + } + + + + let joinAccess = JoinApiModel() + var userIndex : Int! + + @objc func joinBtnClicked2(){ + + let RegisterView = RegisterView() + + var confirmCheck = UserDefaults.standard.bool(forKey: "ConfirmSuccess") ?? false + var samePw = UserDefaults.standard.bool(forKey: "samePw") ?? false + var validPw = UserDefaults.standard.bool(forKey: "validPw") ?? false + + + print(confirmCheck) + print(samePw) + print(validPw) + + if confirmCheck == true && samePw == true && validPw == true { + print("회원가입 가능!") + let userName = RegisterView.nameTextField.text + let email = RegisterView.emailTextField3.text + let password = RegisterView.passwordTextField3.text + let emailCheck = "1" + let profileImg = "urlurl" + + let bodyData : Parameters = [ + "userName" : userName, + "email" : email, + "password" : password, + "emailCheck" : emailCheck, + "profileImg" : profileImg + ] + + joinAccess.requestJoinDataModel(bodyData: bodyData){ + data in + print(data.body) + } + self.present(RegisterationSuccessController(), animated: true) + } + else{ + print("회원가입 불가능") + } +>>>>>>> Stashed changes } @@ -99,6 +149,10 @@ class RegisterationController: UIViewController { @objc func nextBtnClicked(){ let success = UserDefaults.standard.bool(forKey: "success") if success == true { +<<<<<<< Updated upstream +======= + print("회원가입완료") +>>>>>>> Stashed changes self.present(RegisterationSuccessController(), animated: true) UserDefaults.standard.removeObject(forKey: "success") } @@ -160,8 +214,21 @@ extension RegisterationController: UIImagePickerControllerDelegate, UINavigation self.profileImageView.layer.cornerRadius = profileImageView.frame.height/2 self.profileImageView.contentMode = .scaleToFill self.profileImageView.clipsToBounds = true +<<<<<<< Updated upstream self.profileImageView.layer.borderColor = UIColor.clear.cgColor // 원형 이미지의 테두리 제거 +======= + self.profileImageView.layer.borderColor = UIColor.black.cgColor // 원형 이미지의 테두리 제거 + + /* + // 고유한 이미지 이름을 위해 타임스템프 값을 활용 + let timestamp: Int = icuDateToSeconds(getNow()) + // 사용자이름_타임스템프.jpg 형식으로 파일이름 지정 + let imageFileName: String = userName + "_" + String(timestamp) + ".jpg" + // 이미지가 저장될 경로 + let imageFilePath: String = imageDirectory.path + imageFileName + */ +>>>>>>> Stashed changes } dismiss(animated: true, completion: nil) diff --git a/LGHTSG/LGHTSG/Controller/ChartViewController.swift b/LGHTSG/LGHTSG/Controller/ChartViewController.swift new file mode 100644 index 0000000..ba87b7b --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/ChartViewController.swift @@ -0,0 +1,368 @@ +// +// ChartViewController.swift +// LGHTSG +// +// Created by SunHo Lee on 2023/01/22. +// +import UIKit +import Charts +import Kingfisher +import SnapKit +import Foundation + +class ChartViewController : UIViewController { + var stockPriceData = StockPriceModel() + var EstatePriceData = EstatePriceModel() + var nameText : String? + var PriceText : String? + var idx : Int? + + var pricePercentText : String? + var changeDateText : String? + var imageURL : String? + var priceListDatas = [Int]() + var timeListDatas = [String]() + let contentView = UIView() + private let contentScrollView : UIScrollView = { + let scrollview = UIScrollView() + scrollview.backgroundColor = .black + scrollview.translatesAutoresizingMaskIntoConstraints = false + return scrollview + }() + lazy var lineChartView : LineChartView = { + let chartView = LineChartView() + return chartView + }() + private lazy var nameLabel : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 16, weight: .semibold) + label.text = nameText + return label + }() + private lazy var priceLabel : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 14, weight: .medium) + label.textColor = UIColor.systemGray + label.text = PriceText + return label + }() + private lazy var pricePercent : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 12, weight: .medium) + label.textColor = UIColor.red + label.text = pricePercentText + return label + }() + private lazy var changeDate : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 12, weight : .medium) + label.textColor = UIColor.systemGray + label.text = changeDateText + return label + }() + //MARK: - Label + private lazy var dealLabel: UILabel = { + let label = UILabel() + label.text = "거래 이력" + label.font = UIFont.systemFont(ofSize: 12, weight: .light) + label.textColor = .white + return label + }() + + private lazy var revenueLabel: UILabel = { + let label = UILabel() + label.text = "구매 시점에 비해 얼마 올랐어요" + label.textColor = .white + label.font = UIFont.systemFont(ofSize: 16, weight: .bold) + return label + }() + private lazy var imageView : UIImageView = { + let imgview = UIImageView() + if let imageURL = imageURL{ + let url = URL(string: imageURL) + imgview.kf.setImage(with: url) + } + return imgview + }() + + private var lineImage = UnderlineView() + + + //MARK: - SegmentControl + private lazy var segmentCtrl: UISegmentedControl = { + let items = ["일","월", "1년", "3년"] + let seg = UISegmentedControl(items: items) + seg.addTarget(self, action: #selector(indexChanged(_:)), for: .valueChanged) + seg.layer.cornerRadius = 0.7 + seg.backgroundColor = UIColor(named: "dropdown") + seg.tintColor = .lightGray + seg.setTitleTextAttributes( + [ + NSAttributedString.Key.foregroundColor: UIColor.white, + .font: UIFont.systemFont(ofSize: 14, weight: .semibold) + ], + for: .selected + ) + seg.setTitleTextAttributes( + [ + NSAttributedString.Key.foregroundColor: UIColor.systemGray, + .font: UIFont.systemFont(ofSize: 14, weight: .semibold) + ], + for: .normal + ) + seg.selectedSegmentIndex = 1 + return seg + }() + + //MARK: - Button + private lazy var sellButton: UIButton = { + let btn = UIButton() + btn.setTitle("판매", for: .normal) + btn.setTitleColor(.blue, for: .normal) + btn.backgroundColor = .white + btn.layer.cornerRadius = 5 + btn.layer.borderWidth = 1 + return btn + + }() + + //MARK: - TableView + private lazy var tableView: UITableView = { + let table = UITableView() + table.backgroundColor = .clear + return table + + }() + + //MARK: - LifeCycle + override func viewDidLoad() { + super.viewDidLoad() + + setLineChartView() + configure() + + } + //MARK: - TableViewSetting + func setupTableView(){ + contentView.addSubview(tableView) + tableView.delegate = self + tableView.dataSource = self + tableView.register(EstateDetailCell.self, forCellReuseIdentifier: EstateDetailCell.identifier) + tableView.separatorStyle = .none + tableView.snp.makeConstraints{ + $0.top.equalTo(lineImage.snp.bottom) + $0.height.equalTo(120) + $0.leading.equalToSuperview().inset(33) + $0.trailing.equalToSuperview().inset(33) + $0.bottom.equalTo(sellButton.snp.top ).offset(-10) + + } + } + @objc func indexChanged(_ sender: UISegmentedControl){ + switch sender.selectedSegmentIndex{ + case 0: + + let daypricedata : [Int] = priceListDatas.suffix(30) + let daytimeListDatas : [String] = timeListDatas.suffix(30) + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: daypricedata), xAxis: daytimeListDatas, recentPrice : Double(daypricedata.last!)) + tableView.reloadData() + case 1: + let monthpricedata : [Int] = priceListDatas.suffix(90) + let monthtimeListDatas : [String] = timeListDatas.suffix(90) + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: monthpricedata), xAxis: monthtimeListDatas, recentPrice : Double(monthpricedata.last!)) + tableView.reloadData() + case 2: +// let keydate = Calendar(identifier: .gregorian).date(byAdding: , to: <#T##Date#>) + print("3년") + case 3: + print("5년") + default: + break + } + } +} +extension ChartViewController : UITableViewDelegate, UITableViewDataSource { + //cell 높이조절 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return 30 + } + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return timeListDatas.count } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let cell = tableView.dequeueReusableCell(withIdentifier: EstateDetailCell.identifier, for: indexPath) as? EstateDetailCell else { return UITableViewCell() } + + cell.date.text = timeListDatas[indexPath.row] + cell.date.textColor = .white + cell.price.text = "\(priceListDatas[indexPath.row])원" + cell.price.textColor = .white + cell.buysell.text = "hello" + cell.buysell.textColor = .white + return cell + } +} +extension ChartViewController { + func setLineData(lineChartView: LineChartView, lineChartDataEntries: [ChartDataEntry], xAxis : [String], recentPrice : Double) { + // Entry들을 이용해 Data Set 만들기(그런데 우리는 각 포인트를 나타내줄 필요가 없어서 지워줌 + let lineChartdataSet = LineChartDataSet(entries: lineChartDataEntries, label: "주가") + lineChartdataSet.drawValuesEnabled = false + lineChartdataSet.drawCirclesEnabled = false + lineChartdataSet.colors = [.blue] + //선택했을때 라인 지워주기 + lineChartdataSet.drawHorizontalHighlightIndicatorEnabled = false +// lineChartdataSet.drawVerticalHighlightIndicatorEnabled = false + lineChartdataSet.highlightColor = .white + + // DataSet을 차트 데이터로 넣기 + let lineChartData = LineChartData(dataSet: lineChartdataSet) + // 데이터 출력 + lineChartView.data = lineChartData + // 선제거 + lineChartView.leftAxis.drawGridLinesEnabled = false + lineChartView.rightAxis.drawGridLinesEnabled = false + lineChartView.leftAxis.enabled = false // 왼쪽 label 값 지워주기 + lineChartView.rightAxis.enabled = false // right + lineChartView.xAxis.enabled = false // 위쪽 label + lineChartView.xAxis.drawGridLinesEnabled = false + lineChartView.xAxis.drawAxisLineEnabled = false + lineChartView.doubleTapToZoomEnabled = false + // 아래 뜨는 어떤항목인지 알려주는 label 제거 + lineChartView.legend.enabled = false + lineChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: xAxis) + + let marker = ChartMarker(pricedate: xAxis, recentprice: recentPrice) + marker.chartView = lineChartView + marker.chartx = contentView.frame.width - 10 + lineChartView.marker = marker + lineChartView.drawMarkers = true + // 데이터 소수점 제거 + let formatter = NumberFormatter() + formatter.minimumFractionDigits = 0 + lineChartView.data?.setValueFormatter(DefaultValueFormatter(formatter:formatter)) + } + // entry 만들기 + func entryData(yvalues: [Int]) -> [ChartDataEntry] { + // entry 담을 array + var lineDataEntries: [ChartDataEntry] = [] + // 담기 + for i in 0 ..< yvalues.count { + let lineDataEntry = ChartDataEntry(x: Double(i), y: Double(yvalues[i])) + lineDataEntries.append(lineDataEntry) + } + // 반환 + return lineDataEntries + } + private func setLineChartView() { + stockPriceData.requestResellPrice(resellIdx: self.idx!, onCompleted: { (pricelists, transctiontime) in + DispatchQueue.main.async { + self.priceListDatas = pricelists + self.timeListDatas = transctiontime + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: pricelists), xAxis: transctiontime, recentPrice : Double(pricelists.last!)) + + self.chartUI() + self.setupTableView() + + } + }) + + } + +// EstatePriceData.requestStockPrice(EstateIdx: self.idx!, onCompleted: { (pricelists, transctiontime) in +// DispatchQueue.main.async { +// self.view.addSubview(self.lineChartView) +// self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: pricelists), xAxis: transctiontime, recentPrice : Double(pricelists.last!)) +//// self.lineChartView.snp.makeConstraints{ +//// $0.leading.trailing.equalToSuperview() +//// $0.top.bottom.equalToSuperview().inset(140) +//// } +// } +// }) + + } + + +extension ChartViewController { + //MARK: - Configure + private func chartUI(){ + [lineChartView, imageView,lineImage,dealLabel, revenueLabel, segmentCtrl].forEach{contentView.addSubview($0)} + lineChartView.snp.makeConstraints{ + $0.top.equalTo(priceLabel.snp.bottom).offset(20) +// $0.width.equalTo(contentView.snp.width) + $0.leading.trailing.equalTo(contentView ).inset(15) + $0.height.equalTo(270) +// $0.bottom.equalTo(segmentCtrl.snp.top).inset(8) + } + + segmentCtrl.snp.makeConstraints{ + $0.top.equalTo(lineChartView.snp.bottom) + $0.leading.equalTo(contentView.snp.leading).offset(15) + $0.trailing.equalTo(contentView.snp.trailing).offset(-15) + } + imageView.snp.makeConstraints{ + $0.top.equalTo(segmentCtrl.snp.bottom).offset(10) + if imageURL != nil { + $0.width.height.equalTo(300) + }else{ + $0.width.height.equalTo(0) + } + $0.centerX.equalToSuperview() + } + revenueLabel.snp.makeConstraints{ + $0.leading.equalToSuperview().inset(33) + $0.top.equalTo(imageView.snp.bottom).offset(10) + } + + dealLabel.snp.makeConstraints{ + $0.top.equalTo(revenueLabel.snp.bottom).offset(10) + $0.leading.equalToSuperview().inset(33) + } + lineImage.snp.makeConstraints{ + $0.leading.equalToSuperview().inset(33) + $0.trailing.equalToSuperview().inset(33) + $0.height.equalTo(1) + $0.top.equalTo(dealLabel.snp.bottom).offset(4) + } + + + } + private func configure(){ + lineImage.backgroundColor = .label + self.view.addSubview(contentScrollView) + // 스크롤뷰 세로로 + contentScrollView.addSubview(contentView) + [ nameLabel, priceLabel, pricePercent,changeDate, sellButton] + .forEach {contentView.addSubview($0)} + contentScrollView.snp.makeConstraints{ + $0.top.leading.trailing.bottom.equalTo(view.safeAreaLayoutGuide ) + } + contentView.snp.makeConstraints{ + $0.top.leading.trailing.bottom.equalTo(contentScrollView.contentLayoutGuide) + $0.width.equalTo(contentScrollView.frameLayoutGuide) + } + + nameLabel.snp.makeConstraints{ + $0.top.equalTo(contentView).offset(10) + $0.leading.equalTo(contentView.snp.leading).inset(15) + + } + priceLabel.snp.makeConstraints{ + $0.top.equalTo(nameLabel.snp.bottom).offset(8) + $0.leading.equalTo(nameLabel.snp.leading) + } + pricePercent.snp.makeConstraints{ + $0.top.equalTo(nameLabel.snp.bottom).offset(9) + $0.leading.equalTo(priceLabel.snp.trailing).offset(8) + } + changeDate.snp.makeConstraints{ + $0.top.equalTo(nameLabel.snp.bottom).offset(10) + $0.leading.equalTo(pricePercent.snp.trailing).offset(8) + } + + sellButton.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.height.equalTo(48) + $0.width.equalToSuperview().inset(20) + $0.centerX.equalToSuperview() + } + } +} diff --git a/LGHTSG/LGHTSG/Controller/ExploreViewController.swift b/LGHTSG/LGHTSG/Controller/ExploreViewController.swift new file mode 100644 index 0000000..3b50f09 --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/ExploreViewController.swift @@ -0,0 +1,244 @@ +// +// ExploreViewController.swift +// LGHTSG +// +// Created by SunHo Lee on 2023/01/11. +// + +import UIKit +import SnapKit +protocol searchDataFilterDelegate{ + func searchData(data : String) +} +class ExploreViewController : UIViewController { + var delegate1 : searchDataFilterDelegate? + var segmentControl = UnderlineSegmentedControl(items: ["Top", "부동산", "주식", "리셀"]) + let underline1 = UnderlineView() + let underline2 = UnderlineView() + let underline3 = UnderlineView() + let underline4 = UnderlineView() + var resellVC = resellView() + static var isSearching = false + let stockView = StockView() + let TopView = TopViewController() + let EstateVC = EstateController() +// private lazy var reSellView : resellView = { +// let view = resellView(coder: NSCoder) +// return view +// }() + override func viewDidLoad() { + super.viewDidLoad() +// reSellView.delegate = self + stockView.delegate = self + SetNavigationBar() + setTobTabbar() + self.addChild(TopView) + self.view.addSubview(TopView.view) + TopView.view.snp.makeConstraints{ + $0.leading.trailing.equalToSuperview().inset(23) + $0.top.equalTo(underline4.snp.bottom).offset(32) + $0.bottom.equalTo(view.safeAreaLayoutGuide) + } + + } + func setTobTabbar(){ + view.addSubview(segmentControl) + view.addSubview(underline1) + view.addSubview(underline2) + view.addSubview(underline3) + view.addSubview(underline4) + segmentControl.addTarget(self, action: #selector(clickfoursegment), for: .valueChanged) + segmentControl.snp.makeConstraints{ + $0.top.equalTo(view.safeAreaLayoutGuide.snp.top) + $0.leading.trailing.equalToSuperview().inset(16) + $0.height.equalTo(48) + } + underline1.backgroundColor = .white + underline1.snp.makeConstraints{ + $0.leading.equalToSuperview().inset(18) + $0.height.equalTo(1) + $0.width.equalTo((view.frame.width - 36 - 12.5) / 4) + $0.top.equalTo(segmentControl.snp.bottom).offset(-8) + } + underline2.snp.makeConstraints{ + $0.leading.equalTo(underline1.snp.trailing).offset(4.5) + $0.height.equalTo(1) + $0.width.equalTo((view.frame.width - 36 - 12.5) / 4) + $0.top.equalTo(segmentControl.snp.bottom).offset(-8) + } + underline3.snp.makeConstraints{ + $0.leading.equalTo(underline2.snp.trailing).offset(3.5) + $0.height.equalTo(1) + $0.width.equalTo((view.frame.width - 36 - 12.5) / 4) + $0.top.equalTo(segmentControl.snp.bottom).offset(-8) + } + underline4.snp.makeConstraints{ + $0.leading.equalTo(underline3.snp.trailing).offset(4.5) + $0.height.equalTo(1) + $0.width.equalTo((view.frame.width - 36 - 12.5) / 4) + $0.top.equalTo(segmentControl.snp.bottom).offset(-8) + } + } + @objc func clickfoursegment(_ sender : UISegmentedControl){ + switch sender.selectedSegmentIndex { + case 0: + stockView.removeFromParent() + stockView.view.removeFromSuperview() + resellVC.removeFromParent() + resellVC.view.removeFromSuperview() + EstateVC.removeFromParent() + EstateVC.view.removeFromSuperview() + underline1.backgroundColor = .white + underline2.backgroundColor = .darkGray + underline3.backgroundColor = .darkGray + underline4.backgroundColor = .darkGray + self.addChild(TopView) + self.view.addSubview(TopView.view) + TopView.view.snp.makeConstraints{ + $0.leading.trailing.equalToSuperview().inset(23) + $0.top.equalTo(underline4.snp.bottom).offset(32) + $0.bottom.equalTo(view.safeAreaLayoutGuide) + } + + case 1: + stockView.removeFromParent() + stockView.view.removeFromSuperview() + resellVC.removeFromParent() + resellVC.view.removeFromSuperview() + TopView.removeFromParent() + TopView.view.removeFromSuperview() + self.addChild(EstateVC) + self.view.addSubview(EstateVC.view) + EstateVC.view.snp.makeConstraints{ + $0.leading.trailing.equalToSuperview().inset(23) + $0.top.equalTo(underline4.snp.bottom).offset(32) + $0.bottom.equalTo(view.safeAreaLayoutGuide) + } + underline1.backgroundColor = .darkGray + underline2.backgroundColor = .white + underline3.backgroundColor = .darkGray + underline4.backgroundColor = .darkGray + + + case 2: + TopView.removeFromParent() + TopView.view.removeFromSuperview() + EstateVC.removeFromParent() + EstateVC.view.removeFromSuperview() + resellVC.removeFromParent() + resellVC.view.removeFromSuperview() + underline1.backgroundColor = .darkGray + underline2.backgroundColor = .darkGray + underline3.backgroundColor = .white + underline4.backgroundColor = .darkGray + self.addChild(stockView) + self.view.addSubview(stockView.view) + stockView.view.snp.makeConstraints{ + $0.leading.trailing.equalToSuperview().inset(23) + $0.top.equalTo(underline4.snp.bottom).offset(32) + $0.bottom.equalTo(view.safeAreaLayoutGuide) + } + + + case 3: + TopView.removeFromParent() + TopView.view.removeFromSuperview() + stockView.removeFromParent() + stockView.view.removeFromSuperview() + EstateVC.removeFromParent() + EstateVC.view.removeFromSuperview() + underline1.backgroundColor = .darkGray + underline2.backgroundColor = .darkGray + underline3.backgroundColor = .darkGray + underline4.backgroundColor = .white + + + resellVC.delegate = self + self.addChild(resellVC) + self.view.addSubview(resellVC.view) + resellVC.view.snp.makeConstraints{ + $0.leading.trailing.equalToSuperview().inset(23) + $0.top.equalTo(underline4.snp.bottom).offset(32) + $0.bottom.equalTo(view.safeAreaLayoutGuide) + } + + + +// reSellView.alpha = 1 + default: break + } + } +} +extension ExploreViewController : showNavigationDelegate{ + func showSearchBar() { + layoutSearchBar() + } + func hideSearchBar() { + SetNavigationBar() + } + func SetNavigationBar(){ + ExploreViewController.isSearching = false + navigationItem.titleView = nil + let searchBtn = UIBarButtonItem(image: UIImage(systemName : "magnifyingglass"), style: .plain, target: self, action: #selector(showsearchbar)) + navigationItem.leftBarButtonItem = searchBtn + var config = UIButton.Configuration.plain() + var attributeString = AttributedString("-93") + attributeString.font = .systemFont(ofSize: 12, weight: .medium) + attributeString.foregroundColor = UIColor.systemBlue + config.attributedTitle = attributeString + config.titleAlignment = .leading + config.image = UIImage(named: "profile_mini") + config.imagePadding = 8 + config.imagePlacement = .trailing + let realbtn = UIButton(configuration: config) + let profileBtn = UIBarButtonItem(customView:realbtn ) + realbtn.addTarget(self, action: #selector(profileBtnClicked2), for: .touchUpInside) + navigationItem.rightBarButtonItem = profileBtn + } + + @objc func profileBtnClicked2(){ + print("마이페이지 가는중") + let vc = MyPageViewController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + @objc func showsearchbar(){ + layoutSearchBar() + } + func layoutSearchBar(){ + let searchbar = UISearchBar() + searchbar.delegate = self + searchbar.placeholder = "검색어를 입력해주세요" + searchbar.searchTextField.backgroundColor = .clear + navigationItem.leftBarButtonItem = .none + navigationItem.rightBarButtonItem = .none + self.navigationItem.titleView = searchbar + let underline3 = UnderlineView() + navigationItem.titleView?.addSubview(underline3) + underline3.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-8) + $0.leading.trailing.equalToSuperview().inset(15) + $0.height.equalTo(1.5) + } + } +} + +extension ExploreViewController :UISearchBarDelegate { + func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { + if(searchText.isEmpty){ + ExploreViewController.isSearching = false + } + else{ + ExploreViewController.isSearching = true + resellVC.resellSearchLists = resellVC.resellDataLists.filter{ + $0.name.contains(searchText) + }} + stockView.stockSearchLists = stockView.stockDataLists.filter{ + $0.name.contains(searchText) + } + stockView.StockaTableView.reloadData() + resellVC.resellTableView.reloadData() + + } +} diff --git a/LGHTSG/LGHTSG/Controller/HomeViewController.swift b/LGHTSG/LGHTSG/Controller/HomeViewController.swift new file mode 100644 index 0000000..5a6c5e4 --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/HomeViewController.swift @@ -0,0 +1,171 @@ +// +// HomeViewController.swift +// LGHTSG +// +// Created by SunHo Lee on 2023/01/11. +// +import SnapKit +import Foundation +import UIKit +final class HomeViewController : UIViewController{ + private var segmentControl = UnderlineSegmentedControl(items: ["나의 자산", "판매한 자산"]) + var changepercent : String = "-7.2%" + var tableview = UITableView() + var underline1 = UnderlineView() + var underline2 = UnderlineView() + var assetList = [asset]() + var assetmodel = AssetModel() + override func viewDidLoad(){ + super.viewDidLoad() + SetNavigationBar() + setTobTabbar() + segmentControl.addTarget(self, action: #selector(clicksegment), for: .valueChanged) + + setTable() +// assetmodel.delegate = self +// assetmodel.getAsset() + } + // 나의 자산, 판매한 자산 + @objc func clicksegment(_ sender : UISegmentedControl){ + if sender.selectedSegmentIndex == 0{ + underline1.backgroundColor = .white + underline2.backgroundColor = .darkGray + }else{ + underline1.backgroundColor = .darkGray + underline2.backgroundColor = .white + } + } + + +} +private extension HomeViewController{ + + // 네비게이션바 다시 생성 + @objc func shownavigationBar(){ + SetNavigationBar() + } + + + private func SetNavigationBar(){ + navigationItem.titleView = nil + let searchBtn = UIBarButtonItem(image: UIImage(systemName : "magnifyingglass"), style: .plain, target: self, action: #selector(showsearchbar)) + navigationItem.leftBarButtonItem = searchBtn + var config = UIButton.Configuration.plain() + var attributeString = AttributedString(changepercent) + attributeString.font = .systemFont(ofSize: 12, weight: .medium) + attributeString.foregroundColor = UIColor.systemBlue + config.attributedTitle = attributeString + config.titleAlignment = .leading + config.image = UIImage(named: "profile_mini") + config.imagePadding = 8 + config.imagePlacement = .trailing + let realbtn = UIButton(configuration: config) + let profileBtn = UIBarButtonItem(customView:realbtn) + realbtn.addTarget(self, action: #selector(profileBtnClicked), for: .touchUpInside) + navigationItem.rightBarButtonItem = profileBtn + } + + @objc func profileBtnClicked(){ + print("마이페이지 가는중") + let vc = MyPageViewController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + @objc func showsearchbar(){ + layoutSearchBar() + } + func layoutSearchBar(){ + let searchbar = UISearchBar() + searchbar.placeholder = "검색어를 입력해주세요" + searchbar.searchTextField.backgroundColor = .clear + navigationItem.leftBarButtonItem = .none + navigationItem.rightBarButtonItem = .none + self.navigationItem.titleView = searchbar + let underline3 = UnderlineView() + navigationItem.titleView?.addSubview(underline3) + underline3.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-8) + $0.leading.trailing.equalToSuperview().inset(15) + $0.height.equalTo(1.5) + } + } + func setTobTabbar(){ + view.addSubview(segmentControl) + view.addSubview(underline1) + view.addSubview(underline2) + underline1.backgroundColor = .white + segmentControl.snp.makeConstraints{ + $0.top.equalTo(view.safeAreaLayoutGuide.snp.top) + $0.leading.trailing.equalToSuperview() + $0.height.equalTo(50) + } + underline1.snp.makeConstraints{ + $0.leading.equalToSuperview().inset(20) + $0.height.equalTo(1.5) + $0.top.equalTo(segmentControl.snp.bottom).offset(-6) + $0.trailing.equalToSuperview().inset(view.frame.width/2 + 5) + } + underline2.snp.makeConstraints{ + $0.leading.equalTo(view.snp.centerX).offset(5) + $0.height.equalTo(1.5) + $0.top.equalTo(segmentControl.snp.bottom).offset(-6) + $0.trailing.equalToSuperview().inset(20) + } + } + private func setTable(){ + view.addSubview(tableview) + tableview.register(HomeTableCell.self, forCellReuseIdentifier: "HomeTableCell") + tableview.delegate = self + tableview.rowHeight = 56 + tableview.dataSource = self + tableview.separatorStyle = .none + + tableview.snp.makeConstraints{ + $0.top.equalTo(underline1.snp.bottom).offset(32) + $0.leading.trailing.equalToSuperview().inset(33) + $0.bottom.equalToSuperview().inset(100) + } + } +} +extension HomeViewController : UITableViewDelegate,UITableViewDataSource { + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableview.dequeueReusableCell(withIdentifier: "HomeTableCell", for: indexPath) as? HomeTableCell +// cell?.setup(with: assetList[indexPath.row]) + cell?.setuppp() + cell?.countLabel.text = "\(indexPath.row+1)" + + return cell ?? UITableViewCell() + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { +// let selectedIndex = self.segmentControl.selectedSegmentIndex +// switch selectedIndex{ +// case 0: +// return assetList.count +// case 1: +// return assetList.count +// default: +// return 0 +// } + 20 + } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + + } + func scrollViewDidScroll(_ scrollView: UIScrollView) { + if self.tableview.contentOffset.y < 0 { + layoutSearchBar() + } + else if tableview.contentOffset.y>100 { + SetNavigationBar() + } + } +} +//extension HomeViewController : AssetModelProtocol{ +// // MARK : assetmodel protocol function +// func assetRetrived(assets : [asset]){ +// self.assetList = assets +// tableview.reloadData() +// } +//} diff --git a/LGHTSG/LGHTSG/Controller/MainTabController.swift b/LGHTSG/LGHTSG/Controller/MainTabController.swift index 7615f86..74928fb 100644 --- a/LGHTSG/LGHTSG/Controller/MainTabController.swift +++ b/LGHTSG/LGHTSG/Controller/MainTabController.swift @@ -6,6 +6,32 @@ // import UIKit +<<<<<<< Updated upstream +======= +import Foundation +class MainTabController: UITabBarController { + var changepercent : String = "-7.2%" + + + override func viewDidLoad() { + view.backgroundColor = .black + super.viewDidLoad() +// SetNavigationBar() +// swipeGestureNavigationBar() + let systemFontAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 12.0, weight: .semibold)] + UITabBarItem.appearance().setTitleTextAttributes(systemFontAttributes, for: .normal) + let HomeVC = UINavigationController(rootViewController: HomeViewController()) + HomeVC.tabBarItem.title = "Home" + HomeVC.tabBarItem.image = UIImage(named: "home2") + HomeVC.tabBarItem.selectedImage = UIImage(named: "home") + let ExploreVC = UINavigationController(rootViewController:ExploreViewController()) + ExploreVC.tabBarItem.title = "Explore" + ExploreVC.tabBarItem.image = UIImage(named : "compass") + ExploreVC.tabBarItem.selectedImage = UIImage(named: "compass2") + tabBar.layer.borderColor = UIColor.label.cgColor + tabBar.clipsToBounds = false + viewControllers = [HomeVC,ExploreVC] +>>>>>>> Stashed changes class MainTabController: UIViewController { diff --git a/LGHTSG/LGHTSG/Controller/StockChartViewController.swift b/LGHTSG/LGHTSG/Controller/StockChartViewController.swift new file mode 100644 index 0000000..0fc431e --- /dev/null +++ b/LGHTSG/LGHTSG/Controller/StockChartViewController.swift @@ -0,0 +1,455 @@ +// +// StockChartViewController.swift +// LGHTSG +// +// Created by SunHo Lee on 2023/01/31. +// + +import Foundation +import UIKit +import Charts +import SnapKit +class StockChartViewController : UIViewController { + var stockPriceData = StockPriceModel() + var EstatePriceData = EstatePriceModel() + var nameText : String? + + var idx : Int? + var pricePercentText : String? + var changeDateText : String? + var priceListDatas = [Int]() + var timeListDatas = [String]() + var temppriceListDatas = [Int]() + var temptimeListDatas = [String]() + lazy var lineChartView : LineChartView = { + let chartView = LineChartView() + return chartView + }() + private lazy var nameLabel : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 17, weight: .semibold) + label.text = nameText + return label + }() + private lazy var priceLabel : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 14, weight: .medium) + label.textColor = UIColor.systemGray + + return label + }() + private lazy var pricePercent : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 12, weight: .medium) + label.text = pricePercentText + if (label.text!.prefix(1) == "-"){ + label.textColor = UIColor.blue + }else{ + label.textColor = UIColor.red + } + return label + }() + private lazy var changeDate : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 12, weight : .medium) + label.textColor = UIColor.systemGray + label.text = changeDateText + return label + }() + //MARK: - Label + private lazy var dealLabel: UILabel = { + let label = UILabel() + label.text = "거래 이력" + label.font = UIFont.systemFont(ofSize: 12, weight: .light) + label.textColor = .white + return label + }() + + private lazy var revenueLabel: UILabel = { + let label = UILabel() + label.text = "구매 시점에 비해 얼마 올랐어요" + label.textColor = .white + label.font = UIFont.systemFont(ofSize: 16, weight: .bold) + return label + }() + + + private var lineImage = UnderlineView() + + + //MARK: - SegmentControl + private lazy var segmentCtrl: UISegmentedControl = { + let items = ["1일","월", "1년", "5년"] + let seg = UISegmentedControl(items: items) + seg.addTarget(self, action: #selector(indexChanged(_:)), for: .valueChanged) + seg.layer.cornerRadius = 0.7 + seg.backgroundColor = UIColor(named: "dropdown") + seg.tintColor = .lightGray + seg.setTitleTextAttributes( + [ + NSAttributedString.Key.foregroundColor: UIColor.white, + .font: UIFont.systemFont(ofSize: 14, weight: .semibold) + ], + for: .selected + ) + seg.setTitleTextAttributes( + [ + NSAttributedString.Key.foregroundColor: UIColor.systemGray, + .font: UIFont.systemFont(ofSize: 14, weight: .semibold) + ], + for: .normal + ) + seg.selectedSegmentIndex = 3 + return seg + }() + + //MARK: - Button + private lazy var sellButton: UIButton = { + let btn = UIButton() + btn.setTitle("판매", for: .normal) + btn.setTitleColor(.blue, for: .normal) + btn.backgroundColor = .white + btn.layer.cornerRadius = 5 + btn.layer.borderWidth = 1 + return btn + + }() + + //MARK: - TableView + private lazy var tableView: UITableView = { + let table = UITableView() + table.backgroundColor = .black + + return table + + }() + + //MARK: - LifeCycle + override func viewDidLoad() { + super.viewDidLoad() + + configure() + setLineChartView() + + } + //MARK: - TableViewSetting + func setupTableView(){ + tableView.delegate = self + tableView.dataSource = self + tableView.separatorStyle = .none + tableView.register(EstateDetailCell.self, forCellReuseIdentifier: EstateDetailCell.identifier) + } + @objc func indexChanged(_ sender: UISegmentedControl){ + switch sender.selectedSegmentIndex{ + case 0: + changeDate.text = "일주일 대비" + let daypricedata : [Int] = priceListDatas.suffix(7) + let daytimeListDatas : [String] = timeListDatas.suffix(7) + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: daypricedata), xAxis: daytimeListDatas, recentPrice : Double(daypricedata.last!)) + temptimeListDatas = daytimeListDatas + temppriceListDatas = daypricedata + pricePercent.text = "\(String(format: "%.2f", Double((temppriceListDatas.last! - temppriceListDatas[0])) / Double(temppriceListDatas[0]) * 100))%" + if(pricePercent.text?.prefix(1) == "-"){ + pricePercent.textColor = UIColor.blue + } + else{ + pricePercent.textColor = UIColor.red + } + tableView.reloadData() + case 1: + changeDate.text = "한달 전 대비" + let monthpricedata : [Int] = priceListDatas.suffix(31) + let monthtimeListDatas : [String] = timeListDatas.suffix(31) + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: monthpricedata), xAxis: monthtimeListDatas, recentPrice : Double(monthpricedata.last!)) + temppriceListDatas = monthpricedata + temptimeListDatas = monthtimeListDatas + pricePercent.text = "\(String(format: "%.2f", Double((temppriceListDatas.last! - temppriceListDatas[0])) / Double(temppriceListDatas[0]) * 100))%" + if(pricePercent.text?.prefix(1) == "-"){ + pricePercent.textColor = UIColor.blue + } + else{ + pricePercent.textColor = UIColor.red + } + tableView.reloadData() + case 2: + changeDate.text = "1년 전 대비" + temppriceListDatas = [] + temptimeListDatas = [] + guard let recentTimestring = timeListDatas.last else{ return} + // 만약 주식이 상장된지 1년이 안되었다면? 기준을 245개로 잡음 + if(timeListDatas.count < 243){ +// temppriceListDatas = [] +// temptimeListDatas = [] +// for (index, element ) in timeListDatas.enumerated(){ +// if index % 5 == 0 { +// temptimeListDatas.append(element) +// } +// } +// for (index, element ) in priceListDatas.enumerated(){ +// if index % 5 == 0 { +// temppriceListDatas.append(element) +// } +// } + temppriceListDatas = priceListDatas + temptimeListDatas = timeListDatas + pricePercent.text = "\(String(format: "%.2f", Double((temppriceListDatas.last! - temppriceListDatas[0])) / Double(temppriceListDatas[0]) * 100))%" + if(pricePercent.text?.prefix(1) == "-"){ + pricePercent.textColor = UIColor.blue + } + else{ + pricePercent.textColor = UIColor.red + } + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: priceListDatas), xAxis: timeListDatas, recentPrice : Double(priceListDatas.last!)) + tableView.reloadData() + } + else{ + let recenttimedata = Array(recentTimestring) + let changeyear = Int(String(recenttimedata[3]))! - 1 + let changeyearString = recentTimestring.prefix(3) + "\(changeyear)" + recentTimestring.dropFirst(4) + // 정확히 1년전데이터가 있는경우 ex) 2023-1-31 > 2022-1-31 + if let firstindex = timeListDatas.firstIndex(of: String(changeyearString)) { + let temptimeList = Array(timeListDatas.dropFirst(firstindex)) + for (index, element ) in temptimeList.enumerated(){ + if index % 5 == 0 { + temptimeListDatas.append(element) + } + } + let temppriceList = Array(priceListDatas.dropFirst(firstindex)) + for (index, element ) in temppriceList.enumerated(){ + if index % 5 == 0 { + temppriceListDatas.append(element) + } + } + pricePercent.text = "\(String(format: "%.2f", Double((temppriceListDatas.last! - temppriceListDatas[0])) / Double(temppriceListDatas[0]) * 100))%" + if(pricePercent.text?.prefix(1) == "-"){ + pricePercent.textColor = UIColor.blue + } + else{ + pricePercent.textColor = UIColor.red + } + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: temppriceListDatas), xAxis: temptimeListDatas, recentPrice : Double(temppriceListDatas.last!)) + tableView.reloadData() + } + // 그런데 1년이상이지만 날짜상 그날이 휴장일일때를 대비해서 그냥 244개만 데이터 뽑기. + else{ + let beforePriceData = priceListDatas.suffix(244) + let beforeTimeData = timeListDatas.suffix(244) + for (index, element ) in beforeTimeData.enumerated(){ + if index % 5 == 0 { + temptimeListDatas.append(element) + } + } + for (index, element ) in beforePriceData.enumerated(){ + if index % 5 == 0 { + temppriceListDatas.append(element) + } + } + if(!temptimeListDatas.contains( recentTimestring)){ + temptimeListDatas.append(recentTimestring) + temppriceListDatas.append(priceListDatas.last!) + } + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: temppriceListDatas), xAxis: temptimeListDatas, recentPrice : Double(temppriceListDatas.last!)) + pricePercent.text = "\(String(format: "%.2f", Double((temppriceListDatas.last! - temppriceListDatas[0])) / Double(temppriceListDatas[0]) * 100))%" + if(pricePercent.text?.prefix(1) == "-"){ + pricePercent.textColor = UIColor.blue + } + else{ + pricePercent.textColor = UIColor.red + } + tableView.reloadData() + }} + + + case 3: + changeDate.text = "5년전 대비" + temppriceListDatas = [] + temptimeListDatas = [] + for (index, element ) in timeListDatas.enumerated(){ + if index % 5 == 0 { + temptimeListDatas.append(element) + } + } + for (index, element ) in priceListDatas.enumerated(){ + if index % 5 == 0 { + temppriceListDatas.append(element) + } + } + pricePercent.text = "\(String(format: "%.2f", Double((temppriceListDatas.last! - temppriceListDatas[0])) / Double(temppriceListDatas[0]) * 100))%" + if(pricePercent.text?.prefix(1) == "-"){ + pricePercent.textColor = UIColor.blue + } + else{ + pricePercent.textColor = UIColor.red + } + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: temppriceListDatas), xAxis: temptimeListDatas, recentPrice : Double(temppriceListDatas.last!)) + tableView.reloadData() + default: + break + } + } + } + extension StockChartViewController : UITableViewDelegate, UITableViewDataSource { + //cell 높이조절 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return 30 + } + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return temptimeListDatas.count } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let cell = tableView.dequeueReusableCell(withIdentifier: EstateDetailCell.identifier, for: indexPath) as? EstateDetailCell else { return UITableViewCell() } + + cell.date.text = temptimeListDatas[indexPath.row] + cell.date.textColor = .white + cell.price.text = "\(temppriceListDatas[indexPath.row])원" + cell.price.textColor = .white + cell.buysell.text = "hello" + cell.buysell.textColor = .white + return cell + } + } + extension StockChartViewController { + func setLineData(lineChartView: LineChartView, lineChartDataEntries: [ChartDataEntry], xAxis : [String], recentPrice : Double) { + // Entry들을 이용해 Data Set 만들기(그런데 우리는 각 포인트를 나타내줄 필요가 없어서 지워줌 + let lineChartdataSet = LineChartDataSet(entries: lineChartDataEntries, label: "주가") + lineChartdataSet.drawValuesEnabled = false + lineChartdataSet.drawCirclesEnabled = false + lineChartdataSet.colors = [.blue] + //선택했을때 라인 지워주기 + lineChartdataSet.drawHorizontalHighlightIndicatorEnabled = false + // lineChartdataSet.drawVerticalHighlightIndicatorEnabled = false + lineChartdataSet.highlightColor = .white + + // DataSet을 차트 데이터로 넣기 + let lineChartData = LineChartData(dataSet: lineChartdataSet) + // 데이터 출력 + lineChartView.data = lineChartData + // 선제거 + lineChartView.leftAxis.drawGridLinesEnabled = false + lineChartView.rightAxis.drawGridLinesEnabled = false + lineChartView.leftAxis.enabled = false // 왼쪽 label 값 지워주기 + lineChartView.rightAxis.enabled = false // right + lineChartView.xAxis.enabled = false // 위쪽 label + lineChartView.xAxis.drawGridLinesEnabled = false + lineChartView.xAxis.drawAxisLineEnabled = false + lineChartView.doubleTapToZoomEnabled = false + // 아래 뜨는 어떤항목인지 알려주는 label 제거 + lineChartView.legend.enabled = false + lineChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: xAxis) + + let marker = ChartMarker(pricedate: xAxis, recentprice: recentPrice) + + marker.chartView = lineChartView + marker.chartx = view.frame.width - 10 + lineChartView.marker = marker + lineChartView.drawMarkers = true + // 데이터 소수점 제거 + let formatter = NumberFormatter() + formatter.minimumFractionDigits = 0 + lineChartView.data?.setValueFormatter(DefaultValueFormatter(formatter:formatter)) + } + // entry 만들기 + func entryData(yvalues: [Int]) -> [ChartDataEntry] { + // entry 담을 array + var lineDataEntries: [ChartDataEntry] = [] + // 담기 + for i in 0 ..< yvalues.count { + let lineDataEntry = ChartDataEntry(x: Double(i), y: Double(yvalues[i])) + lineDataEntries.append(lineDataEntry) + } + // 반환 + return lineDataEntries + } + private func setLineChartView() { + stockPriceData.requestStockPrice(stockIdx: self.idx!, onCompleted: { (pricelists, transctiontime) in + DispatchQueue.main.async { + self.view.addSubview(self.lineChartView) + let sortedtimeLists = transctiontime.sorted{$0.compare($1, options: .numeric) == .orderedAscending} + self.priceListDatas = pricelists + self.priceLabel.text = "\(self.priceListDatas.last!)원" + self.timeListDatas = sortedtimeLists + self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: pricelists), xAxis: sortedtimeLists, recentPrice : Double(pricelists.last!)) + self.setupTableView() + } + }) + // EstatePriceData.requestStockPrice(EstateIdx: self.idx!, onCompleted: { (pricelists, transctiontime) in + // DispatchQueue.main.async { + // self.view.addSubview(self.lineChartView) + // self.setLineData(lineChartView: self.lineChartView, lineChartDataEntries: self.entryData( yvalues: pricelists), xAxis: transctiontime, recentPrice : Double(pricelists.last!)) + //// self.lineChartView.snp.makeConstraints{ + //// $0.leading.trailing.equalToSuperview() + //// $0.top.bottom.equalToSuperview().inset(140) + //// } + // } + // }) + } + + } + + + extension StockChartViewController { + //MARK: - Configure + private func configure(){ + lineImage.backgroundColor = .label + [nameLabel, priceLabel, pricePercent,changeDate, sellButton, tableView, lineImage,dealLabel, revenueLabel, segmentCtrl,lineChartView] + .forEach {view.addSubview($0)} + nameLabel.snp.makeConstraints{ + $0.top.equalTo(view.safeAreaLayoutGuide.snp.top ).offset(10) + $0.leading.equalToSuperview().inset(15) + } + priceLabel.snp.makeConstraints{ + $0.top.equalTo(nameLabel.snp.bottom).offset(8) + $0.leading.equalTo(nameLabel.snp.leading) + } + pricePercent.snp.makeConstraints{ + $0.top.equalTo(nameLabel.snp.bottom).offset(9) + $0.leading.equalTo(priceLabel.snp.trailing).offset(8) + } + changeDate.snp.makeConstraints{ + $0.top.equalTo(nameLabel.snp.bottom).offset(10) + $0.leading.equalTo(pricePercent.snp.trailing).offset(8) + } + lineChartView.snp.makeConstraints{ + $0.top.equalTo(priceLabel.snp.bottom).offset(30) + $0.leading.equalToSuperview().inset(15) + $0.trailing.equalToSuperview().inset(15) + $0.bottom.equalTo(view.snp.centerY).offset(20) + } + segmentCtrl.snp.makeConstraints{ + $0.top.equalTo(lineChartView.snp.bottom) + $0.leading.equalToSuperview().inset(15) + $0.trailing.equalToSuperview().inset(15) + } + revenueLabel.snp.makeConstraints{ + $0.leading.equalToSuperview().inset(33) + $0.top.equalTo(segmentCtrl.snp.bottom).offset(24) + } + + dealLabel.snp.makeConstraints{ + $0.top.equalTo(revenueLabel.snp.bottom).offset(24) + $0.leading.equalToSuperview().inset(33) + } + lineImage.snp.makeConstraints{ + + $0.leading.equalToSuperview().inset(33) + $0.trailing.equalToSuperview().inset(33) + $0.height.equalTo(1) + $0.top.equalTo(dealLabel.snp.bottom).offset(4) + } + + tableView.snp.makeConstraints{ + $0.top.equalTo(lineImage.snp.bottom) + $0.bottom.equalTo(sellButton.snp.top).offset(-20) + $0.leading.equalToSuperview().inset(33) + $0.trailing.equalToSuperview().inset(33) + } + + sellButton.snp.makeConstraints{ + $0.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom).offset(-10) + $0.leading.equalToSuperview().inset(33) + $0.height.equalTo(48) + $0.trailing.equalToSuperview().inset(33) + } + } + } + diff --git a/LGHTSG/LGHTSG/Info.plist b/LGHTSG/LGHTSG/Info.plist index 79ded2a..059d9f4 100644 --- a/LGHTSG/LGHTSG/Info.plist +++ b/LGHTSG/LGHTSG/Info.plist @@ -2,6 +2,11 @@ + UIAppFonts + + NanumSquareB.ttf + NanumSquareR.ttf + NSAppTransportSecurity NSAllowsArbitraryLoads diff --git a/LGHTSG/LGHTSG/Model/login&join&changepw/changePw.swift b/LGHTSG/LGHTSG/Model/login&join&changepw/changePw.swift new file mode 100644 index 0000000..c3cab47 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/login&join&changepw/changePw.swift @@ -0,0 +1,17 @@ +// +// changePw.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/31. +// + +import Foundation + +struct changePw : Decodable { + + var body : String + + init(body: String) { + self.body = body + } +} diff --git a/LGHTSG/LGHTSG/Model/login&join&changepw/email.swift b/LGHTSG/LGHTSG/Model/login&join&changepw/email.swift new file mode 100644 index 0000000..b4256f2 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/login&join&changepw/email.swift @@ -0,0 +1,17 @@ +// +// email.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/27. +// + +// MARK: - Model +struct email : Decodable { + + let body : String + + struct header : Decodable { + let resultCode : Int + } + +} diff --git a/LGHTSG/LGHTSG/Model/login&join&changepw/join.swift b/LGHTSG/LGHTSG/Model/login&join&changepw/join.swift new file mode 100644 index 0000000..10be859 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/login&join&changepw/join.swift @@ -0,0 +1,22 @@ +// +// join.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/28. +// + +import Foundation +// MARK: - Model + +struct join : Decodable { + let body : body + let header : header + + struct header : Decodable { + let resultCode : Int + } + + struct body : Decodable { + let userIdx : Int + } +} diff --git a/LGHTSG/LGHTSG/Model/login&join&changepw/login.swift b/LGHTSG/LGHTSG/Model/login&join&changepw/login.swift new file mode 100644 index 0000000..0fc76bc --- /dev/null +++ b/LGHTSG/LGHTSG/Model/login&join&changepw/login.swift @@ -0,0 +1,22 @@ +// +// LoginDataModel.swift +// LGHTSG +// + +import Foundation + +// MARK: - Model +struct Login : Decodable { + let body : body + let header : header + + struct header : Decodable { + let resultMsg : String + let resultCode : Int + } + + + struct body : Decodable { + let jwt : String + } +} diff --git a/LGHTSG/LGHTSG/Model/login&join&changepw/user.swift b/LGHTSG/LGHTSG/Model/login&join&changepw/user.swift new file mode 100644 index 0000000..fb5cf22 --- /dev/null +++ b/LGHTSG/LGHTSG/Model/login&join&changepw/user.swift @@ -0,0 +1,22 @@ +// +// user.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/28. +// + +import Foundation +// MARK: - Model + +struct user : Decodable { + let body : body + let header : header + + struct header : Decodable { + let resultCode : Int + } + + struct body : Decodable { + let userIdx : Int + } +} diff --git a/LGHTSG/LGHTSG/View/CheckView/CheckAgreeView.swift b/LGHTSG/LGHTSG/View/CheckView/CheckAgreeView.swift new file mode 100644 index 0000000..977c7c2 --- /dev/null +++ b/LGHTSG/LGHTSG/View/CheckView/CheckAgreeView.swift @@ -0,0 +1,441 @@ +// +// CheckAgreeView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class CheckAgreeView: UIView { + + + var allChecked:Bool = false + var isChecked:Bool = false + var isChecked2:Bool = false + var isChecked3:Bool = false + var isChecked4:Bool = false + + + // MARK: 네비게이션 바 생성 + let navigationBar3 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + + let lineImageView : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "line") + return image + }() + + + let agreeLabel : UILabel = { + let label = UILabel() + label.text = "약관 동의" + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 18.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + let allAgreeLabel : UILabel = { + let label = UILabel() + label.text = "모두 동의하기" + label.textColor = .white + label.font = UIFont(name: "NanumSquareR", size: 15.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + // MARK: 체크박스 + let checkBox: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "not-check-box"), for: .normal) + btn.heightAnchor.constraint(equalToConstant: 30).isActive = true + btn.widthAnchor.constraint(equalToConstant: 30).isActive = true + btn.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let checkBox2: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "not-check-box"), for: .normal) + btn.heightAnchor.constraint(equalToConstant: 30).isActive = true + btn.widthAnchor.constraint(equalToConstant: 30).isActive = true + btn.addTarget(self, action: #selector(buttonClicked2), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let checkBox3: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "not-check-box"), for: .normal) + btn.heightAnchor.constraint(equalToConstant: 30).isActive = true + btn.widthAnchor.constraint(equalToConstant: 30).isActive = true + btn.addTarget(self, action: #selector(buttonClicked3), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + let checkBox4: UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "not-check-box"), for: .normal) + btn.heightAnchor.constraint(equalToConstant: 30).isActive = true + btn.widthAnchor.constraint(equalToConstant: 30).isActive = true + btn.addTarget(self, action: #selector(buttonClicked4), for: .touchUpInside) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + // MARK: 텍스트 상자 + let textboxView: UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-box") + return image + }() + + let textboxContent: UILabel = { + let label = UILabel() + label.text = "met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem " + label.numberOfLines = 0 + label.textColor = .white + label.font = UIFont(name: "NanumSquareB", size: 15.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + // MARK: 각 이용약관 동의버튼 + let agreeBtn1: UIButton = { + let btn = UIButton() + btn.backgroundColor = .black + btn.setImage(UIImage(named: "서비스 이용약관"), for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let agreeBtn2: UIButton = { + let btn = UIButton() + btn.backgroundColor = .clear + btn.setImage(UIImage(named: "개인정보 처리방침"), for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + let agreeBtn3: UIButton = { + let btn = UIButton() + btn.backgroundColor = .clear + btn.setImage(UIImage(named: "마케팅 정보"), for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + // MARK: 다음으로 버튼 + let nextBtnImageView2 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-field") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let nextBtn2 : UIButton = { + let btn = UIButton() + btn.setTitle("다음으로", for: .normal) + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + btn.titleLabel?.textColor = .white + btn.titleLabel?.textAlignment = .center + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + + // MARK: 버튼 관련 함수 + @objc func buttonClicked(button:UIButton){ + + print("buttonClicked") + + // MARK: 클릭했는데 그 전에 클릭된 것이 없다면 + if allChecked == false { + checkBox.setImage(UIImage(named: "check-box"), for: .normal) + checkBox2.setImage(UIImage(named: "check-box"), for: .normal) + checkBox3.setImage(UIImage(named: "check-box"), for: .normal) + checkBox4.setImage(UIImage(named: "check-box"), for: .normal) + + // MARK: 다 체크되었다는 뜻으로 true로 설정 + isChecked = true + isChecked2 = true + isChecked3 = true + isChecked4 = true + allChecked = true + + // MARK: true 값을 넣어준다. + UserDefaults.standard.set(allChecked, forKey: "allcheck") + UserDefaults.standard.set(isChecked2, forKey: "check1") + UserDefaults.standard.set(isChecked3, forKey: "check2") + UserDefaults.standard.set(isChecked4, forKey: "check3") + + nextBtnImageView2.image = UIImage(named: "highlight-btn") + nextBtn2.titleLabel?.textColor = .systemBlue + + } + else + { + checkBox.setImage(UIImage(named: "not-check-box"), for: .normal) + checkBox2.setImage(UIImage(named: "not-check-box"), for: .normal) + checkBox3.setImage(UIImage(named: "not-check-box"), for: .normal) + checkBox4.setImage(UIImage(named: "not-check-box"), for: .normal) + + isChecked = false + isChecked2 = false + isChecked3 = false + isChecked4 = false + allChecked = false + UserDefaults.standard.set(allChecked, forKey: "allcheck") + UserDefaults.standard.set(isChecked2, forKey: "check1") + UserDefaults.standard.set(isChecked3, forKey: "check2") + UserDefaults.standard.set(isChecked4, forKey: "check3") + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + + } + + + @objc func buttonClicked2(button:UIButton){ + + if isChecked2 == false{ + button.setImage(UIImage(named: "check-box"), for: .normal) + } + else{ + button.setImage(UIImage(named: "not-check-box"), for: .normal) + } + + if isChecked2 == true{ + isChecked2 = false + UserDefaults.standard.set(isChecked2, forKey: "check1") + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + else{ + isChecked2 = true + UserDefaults.standard.set(isChecked2, forKey: "check1") + + // MARK: 두 번째 체크박스는 이미 눌려져있으니 논 외로, 그 외에 다 체크되었는지 + if isChecked3 == true && isChecked4 == true{ + nextBtnImageView2.image = UIImage(named: "highlight-btn") + nextBtn2.titleLabel?.textColor = .systemBlue + } + else { + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + } + } + + + + + + + @objc func buttonClicked3(button:UIButton){ + + if isChecked3 == false{ + button.setImage(UIImage(named: "check-box"), for: .normal) + } + else{ + button.setImage(UIImage(named: "not-check-box"), for: .normal) + } + + if isChecked3 == true{ + isChecked3 = false + UserDefaults.standard.set(isChecked3, forKey: "check2") + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + else{ + isChecked3 = true + UserDefaults.standard.set(isChecked3, forKey: "check2") + + // MARK: 세 번째 체크박스는 이미 눌려져있으니 논 외로, 그 외에 다 체크되었는지 + if isChecked2 == true && isChecked4 == true{ + nextBtnImageView2.image = UIImage(named: "highlight-btn") + nextBtn2.titleLabel?.textColor = .systemBlue + } + else { + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + } + + } + + @objc func buttonClicked4(button:UIButton){ + + if isChecked4 == false{ + button.setImage(UIImage(named: "check-box"), for: .normal) + //check2height.isActive = true + } + else{ + button.setImage(UIImage(named: "not-check-box"), for: .normal) + // check2height.isActive = false + } + + if isChecked4 == true{ + isChecked4 = false + UserDefaults.standard.set(isChecked4, forKey: "check3") + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + else{ + isChecked4 = true + UserDefaults.standard.set(isChecked4, forKey: "check3") + + // MARK: 네 번째 체크박스는 이미 눌려져있으니 논 외로, 그 외에 다 체크되었는지 + if isChecked2 == true && isChecked3 == true{ + nextBtnImageView2.image = UIImage(named: "highlight-btn") + nextBtn2.titleLabel?.textColor = .systemBlue + } + else { + nextBtnImageView2.image = UIImage(named: "text-field") + nextBtn2.titleLabel?.textColor = .white + } + + } + } + + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(agreeLabel) + + + addSubview(lineImageView) + addSubview(allAgreeLabel) + addSubview(checkBox) + + + addSubview(textboxView) + addSubview(textboxContent) + + addSubview(checkBox2) + addSubview(checkBox3) + addSubview(checkBox4) + + addSubview(agreeBtn1) + addSubview(agreeBtn2) + addSubview(agreeBtn3) + + addSubview(nextBtnImageView2) + addSubview(nextBtn2) + + + + self.agreeLabel.snp.makeConstraints{ + $0.top.equalToSuperview().offset(80) + $0.left.equalToSuperview().offset(20) + } + + + // MARK: 모두 동의하기 + self.checkBox.snp.makeConstraints{ + $0.top.equalTo(agreeLabel.snp.bottom).offset(50) + $0.left.equalToSuperview().offset(20) + } + + self.allAgreeLabel.snp.makeConstraints{ + $0.top.equalTo(agreeLabel.snp.bottom).offset(55) + $0.left.equalTo(checkBox.snp.right).offset(20) + } + + self.lineImageView.snp.makeConstraints{ + $0.top.equalTo(checkBox.snp.bottom).offset(20) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + + // MARK: 텍스트 박스 + self.textboxView.snp.makeConstraints{ + $0.top.equalTo(lineImageView.snp.bottom).offset(20) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + $0.bottom.equalTo(nextBtnImageView2.snp.top).offset(-300) + } + + self.textboxContent.snp.makeConstraints{ + $0.top.equalTo(lineImageView.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(40) + $0.right.equalToSuperview().offset(-40) + $0.bottom.equalTo(nextBtnImageView2.snp.top).offset(-320) + } + + + // MARK: 마케팅정보 등의 체크박스 + self.checkBox2.snp.makeConstraints{ + $0.top.equalTo(textboxView.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + } + + self.checkBox3.snp.makeConstraints{ + $0.top.equalTo(checkBox2.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + } + + self.checkBox4.snp.makeConstraints{ + $0.top.equalTo(checkBox3.snp.bottom).offset(30) + $0.left.equalToSuperview().offset(20) + } + + + self.agreeBtn1.snp.makeConstraints{ + $0.top.equalTo(textboxView.snp.bottom).offset(35) + $0.left.equalTo(checkBox2.snp.right).offset(20) + } + + self.agreeBtn2.snp.makeConstraints{ + $0.top.equalTo(checkBox2.snp.bottom).offset(35) + $0.left.equalTo(checkBox3.snp.right).offset(20) + } + + self.agreeBtn3.snp.makeConstraints{ + $0.top.equalTo(checkBox3.snp.bottom).offset(35) + $0.left.equalTo(checkBox4.snp.right).offset(20) + } + + // MARK: 다음으로 버튼 + self.nextBtnImageView2.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + + self.nextBtn2.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView2).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + + + } + + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } + +} diff --git a/LGHTSG/LGHTSG/View/CheckView/CheckPageMarketingView.swift b/LGHTSG/LGHTSG/View/CheckView/CheckPageMarketingView.swift new file mode 100644 index 0000000..2b5c754 --- /dev/null +++ b/LGHTSG/LGHTSG/View/CheckView/CheckPageMarketingView.swift @@ -0,0 +1,97 @@ +// +// CheckPageMarketingView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class CheckPageMarketingView: UIView { + + // MARK: 네비게이션 바 생성 + let navigationBar6 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + let textboxImageView4 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-long-box") + return image + }() + + let textContentLabel3 : UILabel = { + let label = UILabel() + label.text = "met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem" + label.textColor = .white + label.numberOfLines = 0 + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + // MARK: 다음으로 버튼 + let nextBtnImageView5 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "highlight-btn") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let nextLabel5 : UIButton = { + let btn = UIButton() + btn.setTitle("동의하기", for: .normal) + btn.setTitleColor(.systemBlue, for: .normal) + btn.titleLabel?.textAlignment = .center + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(textboxImageView4) + addSubview(textContentLabel3) + + addSubview(nextBtnImageView5) + addSubview(nextLabel5) + + self.textboxImageView4.snp.makeConstraints{ + $0.top.equalToSuperview().offset(80) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.textContentLabel3.snp.makeConstraints{ + $0.top.equalTo(textboxImageView4.snp.top).offset(20) + $0.left.equalTo(textboxImageView4.snp.left).offset(20) + $0.right.equalTo(textboxImageView4.snp.right).offset(-20) + $0.bottom.equalTo(textboxImageView4.snp.bottom).offset(-20) + } + + self.nextBtnImageView5.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.nextLabel5.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView5).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} diff --git a/LGHTSG/LGHTSG/View/CheckView/CheckPagePrivacyView.swift b/LGHTSG/LGHTSG/View/CheckView/CheckPagePrivacyView.swift new file mode 100644 index 0000000..d4fa957 --- /dev/null +++ b/LGHTSG/LGHTSG/View/CheckView/CheckPagePrivacyView.swift @@ -0,0 +1,121 @@ +// +// CheckPagePrivacyView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class CheckPagePrivacyView: UIView { + + // MARK: 네비게이션 바 생성 + let navigationBar5 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + let textboxImageView3 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-long-box") + return image + }() + + + //MARK: let scrollview + let scrollView2: UIScrollView = { + let scrollView = UIScrollView() + scrollView.translatesAutoresizingMaskIntoConstraints = false + scrollView.delaysContentTouches = true + scrollView.backgroundColor = .clear + return scrollView + }() + + + let scrollAddView2: UIView = { + let view = UIView() + return view + }() + + let textContentLabel2 : UILabel = { + let label = UILabel() + label.text = "< 라고할때살걸 >('https://api.lghtsg.site'이하 '라고할때살걸')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다\n\n제1조(개인정보의 처리목적)\n< 라고할때살걸 >(이)가 개인정보 보호법 제32조에 따라 등록․공개하는 개인정보파일의 처리목적은 다음과 같습니다.\n\n1. 개인정보 파일명 : 라고할때살걸 사용자 정보\n개인정보의 처리목적 : 서비스 기능 제공을 위한 사용자 구분\n수집방법 : 앱\n보유근거 : 서비스 기능 제공을 위한 사용자 구분\n보유기간 : 1년\n관련법령 : 신용정보의 수집/처리 및 이용 등에 관한 기록 : 3년\n\n\n제2조(처리하는 개인정보의 항목)\n\n① < 라고할때살걸 >은(는) 다음의 개인정보 항목을 처리하고 있습니다.\n\n1< 라고할때살걸 사용자 정보 >\n필수항목 : 이메일, 비밀번호, 로그인ID, 이름, 서비스 이용 기록, 쿠키\n선택항목 :\n 1. 개인정보분쟁조정위원회 : (국번없이) 1833-6972 (www.kopico.go.kr)\n" + label.textColor = .white + label.numberOfLines = 0 + label.font = UIFont(name: "NanumSquareR", size: 13.0) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + // MARK: 다음으로 버튼 + let nextBtnImageView4 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "highlight-btn") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let nextLabel4 : UIButton = { + let btn = UIButton() + btn.setTitle("동의하기", for: .normal) + btn.setTitleColor(.systemBlue, for: .normal) + btn.titleLabel?.textAlignment = .center + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(textboxImageView3) + addSubview(textContentLabel2) + + textContentLabel2.addSubview(scrollView2) + + addSubview(nextBtnImageView4) + addSubview(nextLabel4) + + self.textboxImageView3.snp.makeConstraints{ + $0.top.equalToSuperview().offset(80) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.textContentLabel2.snp.makeConstraints{ + $0.top.equalTo(textboxImageView3.snp.top).offset(20) + $0.left.equalTo(textboxImageView3.snp.left).offset(20) + $0.right.equalTo(textboxImageView3.snp.right).offset(-20) + $0.bottom.equalTo(textboxImageView3.snp.bottom).offset(-20) + } + + self.nextBtnImageView4.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.nextLabel4.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView4).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + + scrollView2.leadingAnchor.constraint(equalTo: textContentLabel2.leadingAnchor).isActive = true + scrollView2.trailingAnchor.constraint(equalTo: textContentLabel2.trailingAnchor).isActive = true + scrollView2.topAnchor.constraint(equalTo: textContentLabel2.bottomAnchor).isActive = true + scrollView2.bottomAnchor.constraint(equalTo: textContentLabel2.bottomAnchor).isActive = true + + } + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} diff --git a/LGHTSG/LGHTSG/View/CheckView/CheckPageServiceView.swift b/LGHTSG/LGHTSG/View/CheckView/CheckPageServiceView.swift new file mode 100644 index 0000000..02dc539 --- /dev/null +++ b/LGHTSG/LGHTSG/View/CheckView/CheckPageServiceView.swift @@ -0,0 +1,101 @@ +// +// CheckPageServiceView.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/25. +// + +import Foundation +import UIKit +import Alamofire +import SnapKit + +class CheckPageServiceView: UIView { + + // MARK: 네비게이션 바 생성 + let navigationBar4 : UINavigationBar = { + let navigationBar = UINavigationBar() + navigationBar.translatesAutoresizingMaskIntoConstraints = false + return navigationBar + }() + + let textboxImageView2 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "text-long-box") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + + let textContentLabel : UILabel = { + let label = UILabel() + label.text = "met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem met,consecondimentum. Integer rhoncus ctetur adipiscing elit. Donec blandit egestas neque, id iaculis ex cursus et. In hac habitasse platea dictumst. Phasellus vel facilisis nisi, et convallis erat. Vivamus ultrices tellus massa, id laoreet neque elementum vitae. Vestibulum ultrices, mauris sit amet pretium volutpat, lorem enim ornare felis, in congue lacus sem" + label.textColor = .white + label.numberOfLines = 0 + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + + // MARK: 다음으로 버튼 + let nextBtnImageView3 : UIImageView = { + let image = UIImageView() + image.image = UIImage(named: "highlight-btn") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let nextLabel3 : UIButton = { + let btn = UIButton() + btn.setTitle("동의하기", for: .normal) + btn.titleLabel?.textAlignment = .center + btn.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) + btn.setTitleColor(.systemBlue, for: .normal) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + }() + + override init(frame: CGRect) { + + super.init(frame: frame) + + addSubview(textboxImageView2) + addSubview(textContentLabel) + + addSubview(nextBtnImageView3) + addSubview(nextLabel3) + + self.textboxImageView2.snp.makeConstraints{ + $0.top.equalToSuperview().offset(80) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.textContentLabel.snp.makeConstraints{ + $0.top.equalTo(textboxImageView2.snp.top).offset(20) + $0.left.equalTo(textboxImageView2.snp.left).offset(20) + $0.right.equalTo(textboxImageView2.snp.right).offset(-20) + $0.bottom.equalTo(textboxImageView2.snp.bottom).offset(-20) + } + + + self.nextBtnImageView3.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + } + + self.nextLabel3.snp.makeConstraints{ + $0.top.equalTo(nextBtnImageView3).offset(10) + $0.left.equalToSuperview().offset(20) + $0.right.equalToSuperview().offset(-20) + + } + + } + + + required init?(coder: NSCoder){ + fatalError("init?(coder:) is not Supported") + } +} diff --git a/LGHTSG/LGHTSG/View/LoginView.swift b/LGHTSG/LGHTSG/View/LoginView.swift index d7d3103..af66a67 100644 --- a/LGHTSG/LGHTSG/View/LoginView.swift +++ b/LGHTSG/LGHTSG/View/LoginView.swift @@ -10,7 +10,11 @@ import UIKit import SnapKit import Alamofire +<<<<<<< Updated upstream class LoginView: UIView { +======= +class LoginView: UIViewController { +>>>>>>> Stashed changes let titleImageView2: UIImageView = { let image = UIImageView() @@ -119,6 +123,17 @@ class LoginView: UIView { return label }() +<<<<<<< Updated upstream +======= + let loginWrongLabel: UILabel = { + let label = UILabel() + label.text = "없는 아이디거나 비밀번호가 틀렸습니다." + label.font = UIFont(name: "NanumSquareR", size: 12.0) + label.textColor = .systemRed + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() +>>>>>>> Stashed changes let login = LoginApiModel() @@ -142,6 +157,7 @@ class LoginView: UIView { data in self.jwt = data.jwt print(data) +<<<<<<< Updated upstream print(data.jwt) } @@ -151,11 +167,36 @@ class LoginView: UIView { print(data) } +======= + } + + /* + loginMsgCode.requestLoginDataModel(bodyData: bodyData){ + data in + print(data) + } + */ + + var loginSuccess = UserDefaults.standard.bool(forKey: "loginSuccess") + loginSuccess = UserDefaults.standard.bool(forKey: "loginSuccess") + print(loginSuccess) + + + if jwt == "" { + print("로그인안됨") + loginWrongheight.isActive = false + } + else { + loginWrongheight.isActive = true + } + +>>>>>>> Stashed changes //UserDefaults.standard.set(emailTextField.text, forKey: "id") //UserDefaults.standard.set(passwordTextField.text, forKey: "pw") } +<<<<<<< Updated upstream @@ -175,6 +216,35 @@ class LoginView: UIView { addSubview(joinBtn2) addSubview(middleLabel2) addSubview(findPwBtn2) +======= + + + // MARK: 로그인 관련 동적라벨 + var loginWrongheight: NSLayoutConstraint! + + + + + + override func viewDidLoad() { + + loginWrongheight = loginWrongLabel.heightAnchor.constraint(equalToConstant: 0) + loginWrongheight.isActive = true + + view.addSubview(titleImageView2) + + view.addSubview(emailImageView) + view.addSubview(emailTextField) + + view.addSubview(pwImageView) + view.addSubview(passwordTextField) + view.addSubview(loginWrongLabel) + + view.addSubview(loginBtn2) + view.addSubview(joinBtn2) + view.addSubview(middleLabel2) + view.addSubview(findPwBtn2) +>>>>>>> Stashed changes //view.addSubview(pwChangeBtn) @@ -184,8 +254,13 @@ class LoginView: UIView { //view.addSubview(errorEmailLabel) //view.addSubview(errorPwLabel) +<<<<<<< Updated upstream addSubview(privacyPolicyLabel) addSubview(memberInquiryLabel) +======= + view.addSubview(privacyPolicyLabel) + view.addSubview(memberInquiryLabel) +>>>>>>> Stashed changes // MARK: 맨 위 이미지 위치 @@ -222,10 +297,23 @@ class LoginView: UIView { $0.right.equalToSuperview().offset(-30) } +<<<<<<< Updated upstream // MARK: 로그인 버튼 self.loginBtn2.snp.makeConstraints { $0.top.equalTo(pwImageView.snp.bottom).offset(20) +======= + self.loginWrongLabel.snp.makeConstraints{ + $0.top.equalTo(pwImageView.snp.bottom).offset(5) + $0.left.equalToSuperview().offset(30) + $0.right.equalToSuperview().offset(-30) + } + + + // MARK: 로그인 버튼 + self.loginBtn2.snp.makeConstraints { + $0.top.equalTo(pwImageView.snp.bottom).offset(40) +>>>>>>> Stashed changes $0.left.equalToSuperview().offset(30) $0.right.equalToSuperview().offset(-30) } diff --git a/LGHTSG/LGHTSG/View/MyPageView.swift b/LGHTSG/LGHTSG/View/MyPageView.swift index bf4bc7f..5dad76e 100644 --- a/LGHTSG/LGHTSG/View/MyPageView.swift +++ b/LGHTSG/LGHTSG/View/MyPageView.swift @@ -19,12 +19,92 @@ class MyPageView : UIView { return navigationBar }() +<<<<<<< Updated upstream override init(frame: CGRect) { super.init(frame: frame) } +======= + var profileImageView2 : UIImageView = { + let image = UIImageView() + image.layer.cornerRadius = image.frame.height/2 + image.layer.borderWidth = 1 + image.layer.masksToBounds = true + image.contentMode = .scaleToFill + image.layer.borderColor = UIColor.clear.cgColor // 원형 이미지의 테두리 제거 + image.clipsToBounds = true + image.image = UIImage(named: "profile") + image.translatesAutoresizingMaskIntoConstraints = false + return image + }() + + let button1 : UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "mypage1"), for: .normal) + return btn + }() + + let button2 : UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "mypage2"), for: .normal) + return btn + }() + + let button3 : UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "mypage3"), for: .normal) + return btn + }() + + let logoutBtn : UIButton = { + let btn = UIButton() + btn.setImage(UIImage(named: "logout-btn"), for: .normal) + return btn + }() + + + + override init(frame: CGRect) { + super.init(frame: frame) + + addSubview(profileImageView2) + addSubview(button1) + addSubview(button2) + addSubview(button3) + addSubview(logoutBtn) + + let logoutLine = UnderlineView() + addSubview(logoutLine) + + self.profileImageView2.snp.makeConstraints { + $0.top.equalToSuperview().offset(100) + $0.centerX.equalToSuperview() + } + + self.button1.snp.makeConstraints { + $0.top.equalTo(profileImageView2.snp.bottom).offset(50) + $0.centerX.equalToSuperview() + } + + self.button2.snp.makeConstraints { + $0.top.equalTo(button1.snp.bottom).offset(10) + $0.centerX.equalToSuperview() + } + + self.button3.snp.makeConstraints { + $0.top.equalTo(button2.snp.bottom).offset(10) + $0.centerX.equalToSuperview() + } + + self.logoutBtn.snp.makeConstraints{ + $0.bottom.equalToSuperview().offset(-50) + $0.centerX.equalToSuperview() + } + } + +>>>>>>> Stashed changes required init?(coder: NSCoder){ fatalError("init?(coder:) is not Supported") diff --git a/LGHTSG/LGHTSG/View/New Group1/HomeTableCell.swift b/LGHTSG/LGHTSG/View/New Group1/HomeTableCell.swift new file mode 100644 index 0000000..21f2f87 --- /dev/null +++ b/LGHTSG/LGHTSG/View/New Group1/HomeTableCell.swift @@ -0,0 +1,189 @@ +// +// HomeTableCell.swift +// LGHTSG +// +// Created by SunHo Lee on 2023/01/14. +// + +import Foundation +import UIKit +import SnapKit +import Kingfisher +class HomeTableCell : UITableViewCell { + + var countLabel : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 16, weight: .bold) + label.textColor = .white + return label + }() + private lazy var nameLabel : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 14, weight: .semibold) + label.textColor = .white + return label + }() + private lazy var priceLabel : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 14, weight: .medium) + label.textColor = UIColor.systemGray + return label + }() + private lazy var pricePercent : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 12, weight: .medium) + label.textColor = UIColor.red + return label + }() + private lazy var changeDate : UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 12, weight : .medium) + label.textColor = UIColor.systemGray + return label + }() + var iconimage = UIImageView() +// override func layoutSubviews() { +// super.layoutSubviews() +// contentView.frame = contentView.frame.inset(by: UIEdgeInsets(top: 12, left: 0, bottom: 12, right: 0)) +// } +} +extension HomeTableCell { + func setup(with assetinfo : asset.body){ + [countLabel, nameLabel, priceLabel, pricePercent, changeDate, iconimage].forEach{ + addSubview($0) + } + + nameLabel.text = assetinfo.name + priceLabel.text = String(assetinfo.price)+"원" + changeDate.text = assetinfo.rateCalDateDiff + let stringofratechange = String(assetinfo.rateOfChange) + if(stringofratechange[stringofratechange.startIndex] == "-"){ + pricePercent.text = "\(stringofratechange)%" + pricePercent.textColor = .blue + }else { + pricePercent.text = "+\(stringofratechange)%" + pricePercent.textColor = .red + } + let url = URL(string: assetinfo.iconImage) + iconimage.clipsToBounds = true + iconimage.kf.setImage(with: url) + countLabel.snp.makeConstraints{ + $0.leading.equalToSuperview() + $0.top.equalToSuperview() + $0.bottom.equalToSuperview().offset(-12) + } + iconimage.snp.makeConstraints{ + $0.leading.equalToSuperview().offset(23.66) + $0.top.equalToSuperview() + $0.height.width.equalTo(44) + $0.bottom.equalToSuperview().offset(-12) + } + nameLabel.snp.makeConstraints{ + $0.leading.equalTo(iconimage.snp.trailing).offset(16.34) + $0.top.equalToSuperview() + + } + priceLabel.snp.makeConstraints{ + $0.leading.equalTo(nameLabel.snp.leading) + $0.top.equalTo(nameLabel.snp.bottom).offset(5) + } + pricePercent.snp.makeConstraints{ + $0.leading.equalTo(priceLabel.snp.trailing).offset(8) + $0.top.equalTo(priceLabel.snp.top) + } + changeDate.snp.makeConstraints{ + $0.leading.equalTo(pricePercent.snp.trailing).offset(9) + $0.top.equalTo(pricePercent.snp.top) + } + } + func setup(with resellinfo : ResellPrice.body){ + [countLabel, nameLabel, priceLabel, pricePercent, changeDate, iconimage].forEach{ + addSubview($0) + } + nameLabel.text = resellinfo.name + priceLabel.text = String(resellinfo.price)+"원" + changeDate.text = resellinfo.rateCalDateDiff + let stringofratechange = String( resellinfo.rateOfChange) + if(stringofratechange[stringofratechange.startIndex] == "-"){ + pricePercent.text = "\(stringofratechange)%" + pricePercent.textColor = .blue + }else { + pricePercent.text = "+\(stringofratechange)%" + pricePercent.textColor = .red + } + + let url = URL(string: resellinfo.imageUrl) + // kf 이미지 둥그렇게 + + iconimage.clipsToBounds = true + iconimage.layer.cornerRadius = 20 + iconimage.backgroundColor = .white + iconimage.kf.setImage(with: url ) + + countLabel.snp.makeConstraints{ + $0.leading.equalToSuperview() + $0.top.equalToSuperview() + $0.bottom.equalToSuperview().offset(-12) + } + iconimage.snp.makeConstraints{ + $0.leading.equalToSuperview().offset(23.66) + $0.top.equalToSuperview() + $0.height.width.equalTo(44) + $0.bottom.equalToSuperview().offset(-12) + } + nameLabel.snp.makeConstraints{ + $0.leading.equalTo(iconimage.snp.trailing).offset(16.34) + $0.top.equalToSuperview() + + } + priceLabel.snp.makeConstraints{ + $0.leading.equalTo(nameLabel.snp.leading) + $0.top.equalTo(nameLabel.snp.bottom).offset(5) + } + pricePercent.snp.makeConstraints{ + $0.leading.equalTo(priceLabel.snp.trailing).offset(8) + $0.top.equalTo(priceLabel.snp.top) + } + changeDate.snp.makeConstraints{ + $0.leading.equalTo(pricePercent.snp.trailing).offset(9) + $0.top.equalTo(pricePercent.snp.top) + } + } + func setuppp(){ + [countLabel, nameLabel, priceLabel, pricePercent, changeDate, iconimage].forEach{ + addSubview($0) + } + nameLabel.text = "서울특별시 강남구 논현동 동현아파트" + priceLabel.text = "22,303,921원/m2" + changeDate.text = "3달전 대비" + pricePercent.text = "+3.0%" + iconimage.image = UIImage(systemName: "star") + countLabel.snp.makeConstraints{ + $0.leading.equalToSuperview() + $0.top.equalToSuperview() + $0.bottom.equalToSuperview().offset(-12) + } + iconimage.snp.makeConstraints{ + $0.leading.equalToSuperview().offset(23.66) + $0.top.equalToSuperview() + $0.bottom.equalToSuperview().offset(-12) + } + nameLabel.snp.makeConstraints{ + $0.leading.equalTo(iconimage.snp.trailing).offset(16.34) + $0.top.equalToSuperview() + + } + priceLabel.snp.makeConstraints{ + $0.leading.equalTo(nameLabel.snp.leading) + $0.top.equalTo(nameLabel.snp.bottom).offset(5) + } + pricePercent.snp.makeConstraints{ + $0.leading.equalTo(priceLabel.snp.trailing).offset(8) + $0.top.equalTo(priceLabel.snp.top) + } + changeDate.snp.makeConstraints{ + $0.leading.equalTo(pricePercent.snp.trailing).offset(9) + $0.top.equalTo(pricePercent.snp.top) + } + } +} diff --git a/LGHTSG/LGHTSG/View/with RegisterView/JoinSuccessView.swift b/LGHTSG/LGHTSG/View/with RegisterView/JoinSuccessView.swift index fbd0e3d..eec0fba 100644 --- a/LGHTSG/LGHTSG/View/with RegisterView/JoinSuccessView.swift +++ b/LGHTSG/LGHTSG/View/with RegisterView/JoinSuccessView.swift @@ -1,9 +1,16 @@ +<<<<<<< Updated upstream +======= + +>>>>>>> Stashed changes // // JoinSuccessView.swift // LGHTSG // // +<<<<<<< Updated upstream +======= +>>>>>>> Stashed changes import Foundation import UIKit import Alamofire diff --git a/LGHTSG/LGHTSG/View/with RegisterView/RegisterView.swift b/LGHTSG/LGHTSG/View/with RegisterView/RegisterView.swift index 401d1b1..d96872f 100644 --- a/LGHTSG/LGHTSG/View/with RegisterView/RegisterView.swift +++ b/LGHTSG/LGHTSG/View/with RegisterView/RegisterView.swift @@ -201,7 +201,11 @@ class RegisterView : UIView { label.titleLabel?.font = UIFont(name: "NanumSquareB", size: 15.0) label.titleLabel?.textColor = .white label.titleLabel?.textAlignment = .center +<<<<<<< Updated upstream label.addTarget(self, action: #selector(joinBtnClicked2), for: .touchUpInside) +======= + //label.addTarget(self, action: #selector(joinBtnClicked2), for: .touchUpInside) +>>>>>>> Stashed changes return label }() @@ -236,6 +240,10 @@ class RegisterView : UIView { codeTextField2.isUserInteractionEnabled = false codeConfirmheight2.isActive = true emailSuccess = "1" +<<<<<<< Updated upstream +======= + UserDefaults.standard.set(true, forKey: "ConfirmSuccess") +>>>>>>> Stashed changes } else { codeConfirmheight2.isActive = false @@ -250,6 +258,10 @@ class RegisterView : UIView { func isSamePassword2(_ first: UITextField, _ second: UITextField) -> Bool { if (first.text == second.text){ samePw = "1" +<<<<<<< Updated upstream +======= + UserDefaults.standard.set(true, forKey: "samePw") +>>>>>>> Stashed changes return true } return false @@ -266,6 +278,10 @@ class RegisterView : UIView { if hasPassword.count > 7 && predicate.evaluate(with: hasPassword){ print("패스워드 유효") validPw = "1" +<<<<<<< Updated upstream +======= + UserDefaults.standard.set(true, forKey: "validPw") +>>>>>>> Stashed changes return true } } @@ -333,7 +349,11 @@ class RegisterView : UIView { } +<<<<<<< Updated upstream +======= + /* +>>>>>>> Stashed changes let joinAccess = JoinApiModel() var userIndex : Int! @@ -370,6 +390,10 @@ class RegisterView : UIView { print("비밀번호 과정을 통과하지못해 회원가입 불가능") } } +<<<<<<< Updated upstream +======= + */ +>>>>>>> Stashed changes override init(frame: CGRect) { diff --git a/LGHTSG/LGHTSG/ViewController.swift b/LGHTSG/LGHTSG/ViewController.swift new file mode 100644 index 0000000..a70d89a --- /dev/null +++ b/LGHTSG/LGHTSG/ViewController.swift @@ -0,0 +1,55 @@ +// +// ViewController.swift +// LGHTSG +// +// Created by HA on 2023/01/09. +// + +import UIKit + +class ViewController: UIViewController { + + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .black + + + let StartView = StartView() + self.view.addSubview(StartView) + + + StartView.translatesAutoresizingMaskIntoConstraints = false + StartView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true + StartView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true + StartView.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true + StartView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true + + + StartView.loginBtn.addTarget(self, action: #selector(loginBtnClicked), for: .touchUpInside) + StartView.joinBtn.addTarget(self, action: #selector(joinBtnClicked), for: .touchUpInside) + StartView.findPwBtn.addTarget(self, action: #selector(findPwBtnClicked), for: .touchUpInside) + } + + @objc func loginBtnClicked() { + let vc = LoginController() + vc.modalPresentationStyle = .overCurrentContext + self.present(vc, animated: true) + } + + @objc func joinBtnClicked() { + let vc = CheckAgreeController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + @objc func findPwBtnClicked(){ + let vc = FindPassWordController() + vc.modalPresentationStyle = .fullScreen + self.present(vc, animated: true) + } + + + +} + diff --git a/LGHTSG/LGHTSG/ViewModel/ChangePwModel.swift b/LGHTSG/LGHTSG/ViewModel/ChangePwModel.swift new file mode 100644 index 0000000..598bef5 --- /dev/null +++ b/LGHTSG/LGHTSG/ViewModel/ChangePwModel.swift @@ -0,0 +1,40 @@ +// +// ChangePwApiModel.swift +// LGHTSG +// +// Created by 홍수정 on 2023/01/31. +// + +import Foundation +import Alamofire + + +class ChangePwApiModel { + + var urlString : String? + + func requestChangeDataModel(bodyData : Parameters, onCompleted : @escaping(changePw) -> Void){ + + urlString = "http://api.lghtsg.site:8090/users/changeInfo/pw-not-login" + + guard let urlString = urlString else{ return} + guard let url = URL(string: urlString) else {return print("erorr")} + + + let header : HTTPHeaders = [ + "Content-Type" : "application/json" + ] + + + AF.request(url, method: .patch, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: changePw.self){ response in + switch response.result { + case .success(let response): + onCompleted(response) + case .failure(let error): + print(error.localizedDescription) + } + } + + } + +} diff --git a/LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift b/LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift index 11221a4..e872fa1 100644 --- a/LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift +++ b/LGHTSG/LGHTSG/ViewModel/JoinApiModel.swift @@ -24,9 +24,17 @@ class JoinApiModel { AF.request(url, method: .post, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: join.self){ response in switch response.result { +<<<<<<< Updated upstream case .success(let response): onCompleted(response) case .failure(let error): +======= + case .success(let res): + print(response.debugDescription) + onCompleted(res) + case .failure(let error): + print(response.debugDescription) +>>>>>>> Stashed changes print(error.localizedDescription) } } diff --git a/LGHTSG/LGHTSG/ViewModel/LoginApiHeaderModel.swift b/LGHTSG/LGHTSG/ViewModel/LoginApiHeaderModel.swift index 10234dc..a54fbab 100644 --- a/LGHTSG/LGHTSG/ViewModel/LoginApiHeaderModel.swift +++ b/LGHTSG/LGHTSG/ViewModel/LoginApiHeaderModel.swift @@ -25,6 +25,7 @@ class LoginApiHeaderModel { ] +<<<<<<< Updated upstream AF.request(url, method: .post, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: Login.self){ response in switch response.result { case .success(let response): @@ -33,6 +34,47 @@ class LoginApiHeaderModel { print("=======") print(response) print(error.localizedDescription) +======= + AF.request(url, method: .post, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: Login.header.self){ response in + + switch response.result { + + case .success(let res): + onCompleted(res) + + case .failure(_): + //print(response.debugDescription) + let result = response.debugDescription + var sstartIndex = 0 + var eendIndex = 0 + + for i in stride(from: result.count-18 , to: 0, by: -1){ + + let first = result[result.index(result.startIndex, offsetBy: i)] + let eight = result[result.index(result.startIndex, offsetBy: i+17)] + if first == "B" && eight == "h" { + sstartIndex = i+17 + break + } + } + for j in sstartIndex...result.count-58 { + let first = result[result.index(result.startIndex, offsetBy: j)] + let second = result[result.index(result.startIndex, offsetBy: j+56)] + let third = result[result.index(result.startIndex, offsetBy: j+57)] + if first == "h" && second == "}" && third == "}" { + eendIndex = j+57 + break + } + } + var resultt : String = "" + for i in stride(from: eendIndex, to: sstartIndex, by: -1) { + let first : String = String(result[result.index(result.startIndex, offsetBy: i)]) + resultt = resultt + first + } + //print(resultt) + UserDefaults.standard.set(resultt, forKey: "loginHeader") + print("등록되었음") +>>>>>>> Stashed changes } } diff --git a/LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift b/LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift index 877ef06..0f6a626 100644 --- a/LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift +++ b/LGHTSG/LGHTSG/ViewModel/LoginApiModel.swift @@ -24,9 +24,18 @@ class LoginApiModel { AF.request(url, method: .post, parameters: bodyData, encoding: JSONEncoding(), headers: header).validate().responseDecodable(of: Login.self){ response in switch response.result { case .success(let response): +<<<<<<< Updated upstream onCompleted(response.body) case .failure(let error): print(error.localizedDescription) +======= + UserDefaults.standard.set(true, forKey: "loginSuccess") + onCompleted(response.body) + case .failure(let error): + print("error") + UserDefaults.standard.set(false, forKey: "loginSuccess") + +>>>>>>> Stashed changes } }