From 1eb2145f8d9389617fe2eaa9381fe74b3286ddbf Mon Sep 17 00:00:00 2001 From: junha Date: Wed, 21 Jun 2023 09:30:57 +0900 Subject: [PATCH 1/8] Feat:: Tabbar --- .../Sources/ModuleFactory/ModuleFactory.swift | 6 +++ .../announcementImage.imageset/Contents.json | 24 +++++++++ .../announcementImage.png | Bin 0 -> 457 bytes .../companyListImage.imageset/Contents.json | 24 +++++++++ .../companyListImage.png | Bin 0 -> 365 bytes .../myPageImage.imageset/Contents.json | 24 +++++++++ .../myPageImage.imageset/myPageImage.png | Bin 0 -> 530 bytes .../Contents.json | 24 +++++++++ .../recruitmentAnnouncementImage.png | Bin 0 -> 631 bytes .../Interface/ModuleFactoryInterface.swift | 1 + .../Sources/Tabbar/TabbarViewController.swift | 48 ++++++++++++++++++ 11 files changed, 151 insertions(+) create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/Contents.json create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/announcementImage.png create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/Contents.json create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/companyListImage.png create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/myPageImage.imageset/Contents.json create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/myPageImage.imageset/myPageImage.png create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/recruitmentAnnouncementImage.imageset/Contents.json create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/recruitmentAnnouncementImage.imageset/recruitmentAnnouncementImage.png create mode 100644 Projects/Presentation/Sources/Tabbar/TabbarViewController.swift diff --git a/Projects/INFO-iOS/Sources/ModuleFactory/ModuleFactory.swift b/Projects/INFO-iOS/Sources/ModuleFactory/ModuleFactory.swift index e652988..7396063 100644 --- a/Projects/INFO-iOS/Sources/ModuleFactory/ModuleFactory.swift +++ b/Projects/INFO-iOS/Sources/ModuleFactory/ModuleFactory.swift @@ -19,4 +19,10 @@ extension ModuleFactory: ModuleFactoryInterface { return signupVC } + + public func tabBarVC() -> TapBarViewController { + let tabbarVC = TapBarViewController() + + return tabbarVC + } } diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/Contents.json b/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/Contents.json new file mode 100644 index 0000000..fc4506d --- /dev/null +++ b/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "filename" : "announcementImage.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/announcementImage.png b/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/announcementImage.png new file mode 100644 index 0000000000000000000000000000000000000000..20f8622b52200849a70ed8217fe7d472d107edf5 GIT binary patch literal 457 zcmV;)0XF`LP)u)EWp@p{kVk z2gb(sb2ew+5iKmik1We<6prh1mXf(_DP`6NoJC#Nt(7k<17tN# zP#{^9Fc7h1jkXJ27aC8 zjf!^(Fqe%z*KZxjE351JW)KVgt1t{J`b&KRq6&(!FSjI600000NkvXXu0mjfEY7{E literal 0 HcmV?d00001 diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/Contents.json b/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/Contents.json new file mode 100644 index 0000000..aee7990 --- /dev/null +++ b/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "filename" : "companyListImage.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/companyListImage.png b/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/companyListImage.png new file mode 100644 index 0000000000000000000000000000000000000000..a81e6faf2993a4d1b3c38e68d35eb4046f98ac00 GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIVMjR$B+ufx6>Z-HW>)C-af`y!0dKGQ05?K z3X9Z_dBl zOzL?$=X1*;9}{0;A?qh+7R^*jIAU~-SG=|{C`$3H3~PwJ$(|3wYWZ1j)+*-hI8s=1 zZL7{{t{1yk8pdv(7c^_x$~T#&K^w20vt8nq@XfxX)Mn|Hy&F^x`}CIX*tX;GtwSu= z#o~`k{<|)4w$?Q!CZ7_F1?81QD@kx^cV-7EkN$`t0p!1|wkWEeQ>~tTsf-v(IdCbUxvMgim zoVt%#n!G5A5xO~903R;q^Lg4?kl_jN*AJ#hS!_0&#bm(hEM?%W0F#Cgo~px}ZIj{M z4rbqCHM->c2C*$q0h$oY$L;;m=O655Ue45}CJK#6Q*bAE0cy+nLW?lyf{RtJoZi3Bj>||BRxc@ z?kv~DN2Hu866zZ9O8xL8aXgKwCs<21=VBkQ7U%FBuest&E-MJts@|OgYd|ad1tM?4 U@m576!vFvP07*qoM6N<$f)-rd3;+NC literal 0 HcmV?d00001 diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/recruitmentAnnouncementImage.imageset/Contents.json b/Projects/Modules/INFOKit/Resources/Assets.xcassets/recruitmentAnnouncementImage.imageset/Contents.json new file mode 100644 index 0000000..0457ae3 --- /dev/null +++ b/Projects/Modules/INFOKit/Resources/Assets.xcassets/recruitmentAnnouncementImage.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "filename" : "recruitmentAnnouncementImage.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/recruitmentAnnouncementImage.imageset/recruitmentAnnouncementImage.png b/Projects/Modules/INFOKit/Resources/Assets.xcassets/recruitmentAnnouncementImage.imageset/recruitmentAnnouncementImage.png new file mode 100644 index 0000000000000000000000000000000000000000..c2164caaf337053260cb38b8718f9493d73a1d4d GIT binary patch literal 631 zcmV--0*L*IP)d&Y02peC~|L<9*i08w)i}+weg0MQSoJ>D_ELvmOGUD309S zVzICbfv_;lx~QVyq5wWM#dn4T%nWVO&nm)rck%GjN&{dI21IWGB2qsAyNlG901??9 z(qfhM?Z$_2vI~DjR1Y>qc?_}&0LO<6>{AUTunE$kkLN)C4r8`YTT%gLb2{X7>l)IF zEv~F3b*Ml9EE$GnYy-S1>U#r3b?|cX(4l@q3G87RG^mD%IZBsG>Bn!TE-P?Q}o}Vd>U5J_fwa0OrGLmnw>@(H})sL4TH3 R LoginViewController func signupVC() -> SignupViewController + func tabBarVC() -> TapBarViewController } diff --git a/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift b/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift new file mode 100644 index 0000000..88dca8f --- /dev/null +++ b/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift @@ -0,0 +1,48 @@ +import INFOKit +import UIKit +import Then +import SnapKit + +public class TapBarViewController : UITabBarController { + + public var factory: ModuleFactoryInterface! + + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + let homeVC = UINavigationController(rootViewController: UIViewController()) + let tabOneBarItem = UITabBarItem(title: "회사목록", + image: INFOKitAsset.Assets.companyList.image, + tag: 1) + + homeVC.tabBarItem = tabOneBarItem + + let boardVC = UINavigationController(rootViewController: UIViewController()) + let tabTwoBarItem2 = UITabBarItem(title: "모집공고", + image: INFOKitAsset.Assets.recruitmentAnnouncement.image, + tag: 2) + boardVC.tabBarItem = tabTwoBarItem2 + + let tendinousVC = UINavigationController(rootViewController: UIViewController()) + let tabThrBarItem3 = UITabBarItem(title: "공지사항", + image: INFOKitAsset.Assets.announcement.image, + tag: 3) + + tendinousVC.tabBarItem = tabThrBarItem3 + + let reviewVC = UINavigationController(rootViewController: UIViewController()) + let tabFouBarItem4 = UITabBarItem(title: "내정보", + image: INFOKitAsset.Assets.myPage.image, + tag: 4) + + reviewVC.tabBarItem = tabFouBarItem4 + + + self.tabBar.tintColor = INFOKitAsset.Colors.mainColor.color + self.tabBar.unselectedItemTintColor = INFOKitAsset.Colors.thinGrayColor.color + self.viewControllers = [homeVC, boardVC, tendinousVC, reviewVC] + self.tabBar.backgroundColor = .white + + + } +} From 7db416cdfd560c5b451471a8227f47faf9bdb695 Mon Sep 17 00:00:00 2001 From: junha Date: Wed, 21 Jun 2023 10:17:01 +0900 Subject: [PATCH 2/8] bug:: comment --- .../Sources/Entities/Auth/AuthEntities.swift | 28 +-- .../RepositoryInterfaces/AuthRepository.swift | 20 +- .../Domain/Sources/UseCases/AuthUseCase.swift | 230 +++++++++--------- 3 files changed, 139 insertions(+), 139 deletions(-) diff --git a/Projects/Domain/Sources/Entities/Auth/AuthEntities.swift b/Projects/Domain/Sources/Entities/Auth/AuthEntities.swift index 55fb965..f922aae 100644 --- a/Projects/Domain/Sources/Entities/Auth/AuthEntities.swift +++ b/Projects/Domain/Sources/Entities/Auth/AuthEntities.swift @@ -1,14 +1,14 @@ -import UIKit -import INetwork - -public struct AuthEntities { - let token: Token - let username: String - let email: String - - init(token: Token, username: String, email: String) { - self.token = token - self.username = username - self.email = email - } -} +//import UIKit +//import INetwork +// +//public struct AuthEntities { +// let token: Token +// let username: String +// let email: String +// +// init(token: Token, username: String, email: String) { +// self.token = token +// self.username = username +// self.email = email +// } +//} diff --git a/Projects/Domain/Sources/RepositoryInterfaces/AuthRepository.swift b/Projects/Domain/Sources/RepositoryInterfaces/AuthRepository.swift index 442dc64..66f9ebc 100644 --- a/Projects/Domain/Sources/RepositoryInterfaces/AuthRepository.swift +++ b/Projects/Domain/Sources/RepositoryInterfaces/AuthRepository.swift @@ -1,10 +1,10 @@ -import UIKit -import RxSwift -import RxCocoa - -public protocol AuthRepository { - func login(username: String, password: String, completion: @escaping (Result) -> Void) - func sendCode(email: String, completion: @escaping (Result) -> Void) - func checkCode(code: String, completion: @escaping (Result) -> Void) - func signUp(username: String, password: String, email: String, completion: @escaping (Result) -> Void) -} +//import UIKit +//import RxSwift +//import RxCocoa +// +//public protocol AuthRepository { +// func login(username: String, password: String, completion: @escaping (Result) -> Void) +// func sendCode(email: String, completion: @escaping (Result) -> Void) +// func checkCode(code: String, completion: @escaping (Result) -> Void) +// func signUp(username: String, password: String, email: String, completion: @escaping (Result) -> Void) +//} diff --git a/Projects/Domain/Sources/UseCases/AuthUseCase.swift b/Projects/Domain/Sources/UseCases/AuthUseCase.swift index f996e0e..249365f 100644 --- a/Projects/Domain/Sources/UseCases/AuthUseCase.swift +++ b/Projects/Domain/Sources/UseCases/AuthUseCase.swift @@ -1,115 +1,115 @@ -import Foundation -import RxSwift -import INetwork - -public protocol AuthUseCase { - func login(email: String, password: String) - func sendCode(email: String) - func checkCode(email: String, data: String, type: String) - func signUp(emailCode: String, studentKey: String, name: String, email: String, password: String, githubLink: String?) - func reissueToken() - func checkTokenTime(token: String) - - var authSuccess: PublishSubject { get } - var authFail: PublishSubject { get } - var codeSent: PublishSubject { get } - var codeCheckSuccess: PublishSubject { get } - var signUpSuccess: PublishSubject { get } - var tokenReissued: PublishSubject { get } - var tokenTimeChecked: PublishSubject { get } -} - -public final class DefaultAuthUseCase: AuthUseCase { - private let authService: AuthService - private let disposeBag = DisposeBag() - - public var authSuccess = PublishSubject() - public var authFail = PublishSubject() - public var codeSent = PublishSubject() - public var codeCheckSuccess = PublishSubject() - public var signUpSuccess = PublishSubject() - public var tokenReissued = PublishSubject() - public var tokenTimeChecked = PublishSubject() - - public init(authService: AuthService) { - self.authService = authService - } - - public func login(email: String, password: String) { - authService.login(email: email, password: password) - .subscribe( - onSuccess: { [weak self] token in - self?.authSuccess.onNext(token) - }, - onFailure: { [weak self] error in - self?.authFail.onNext(error) - } - ) - .disposed(by: disposeBag) - } - - public func sendCode(email: String) { - authService.sendCode(email: email) - .subscribe( - onSuccess: { [weak self] in - self?.codeSent.onNext(()) - }, - onFailure: { [weak self] error in - self?.authFail.onNext(error) - } - ) - .disposed(by: disposeBag) - } - - public func checkCode(email: String, data: String, type: String) { - authService.checkCode(email: email, data: data, type: type) - .subscribe( - onSuccess: { [weak self] in - self?.codeCheckSuccess.onNext(()) - }, - onFailure: { [weak self] error in - self?.authFail.onNext(error) - } - ) - .disposed(by: disposeBag) - } - - public func signUp(emailCode: String, studentKey: String, name: String, email: String, password: String, githubLink: String?) { - authService.signUp(emailCode: emailCode, studentKey: studentKey, name: name, email: email, password: password, githubLink: githubLink) - .subscribe( - onSuccess: { [weak self] in - self?.signUpSuccess.onNext(()) - }, - onFailure: { [weak self] error in - self?.authFail.onNext(error) - } - ) - .disposed(by: disposeBag) - } - - public func reissueToken() { - authService.reissueToken() - .subscribe( - onSuccess: { [weak self] token in - self?.tokenReissued.onNext(token) - }, - onFailure: { [weak self] error in - self?.authFail.onNext(error) - } - ) - .disposed(by: disposeBag) - } - - public func checkTokenTime(token: String) { - authService.checkTokenTime(token: token) - .subscribe( - onSuccess: { [weak self] remainingTime in - self?.tokenTimeChecked.onNext(remainingTime) - }, - onFailure: { [weak self] error in - self?.authFail.onNext(error) - } - ) - .disposed(by: disposeBag) - } -} +//import Foundation +//import RxSwift +//import INetwork +// +//public protocol AuthUseCase { +// func login(email: String, password: String) +// func sendCode(email: String) +// func checkCode(email: String, data: String, type: String) +// func signUp(emailCode: String, studentKey: String, name: String, email: String, password: String, githubLink: String?) +// func reissueToken() +// func checkTokenTime(token: String) +// +// var authSuccess: PublishSubject { get } +// var authFail: PublishSubject { get } +// var codeSent: PublishSubject { get } +// var codeCheckSuccess: PublishSubject { get } +// var signUpSuccess: PublishSubject { get } +// var tokenReissued: PublishSubject { get } +// var tokenTimeChecked: PublishSubject { get } +//} +// +//public final class DefaultAuthUseCase: AuthUseCase { +// private let authService: AuthService +// private let disposeBag = DisposeBag() +// +// public var authSuccess = PublishSubject() +// public var authFail = PublishSubject() +// public var codeSent = PublishSubject() +// public var codeCheckSuccess = PublishSubject() +// public var signUpSuccess = PublishSubject() +// public var tokenReissued = PublishSubject() +// public var tokenTimeChecked = PublishSubject() +// +// public init(authService: AuthService) { +// self.authService = authService +// } +// +// public func login(email: String, password: String) { +// authService.login(email: email, password: password) +// .subscribe( +// onSuccess: { [weak self] token in +// self?.authSuccess.onNext(token) +// }, +// onFailure: { [weak self] error in +// self?.authFail.onNext(error) +// } +// ) +// .disposed(by: disposeBag) +// } +// +// public func sendCode(email: String) { +// authService.sendCode(email: email) +// .subscribe( +// onSuccess: { [weak self] in +// self?.codeSent.onNext(()) +// }, +// onFailure: { [weak self] error in +// self?.authFail.onNext(error) +// } +// ) +// .disposed(by: disposeBag) +// } +// +// public func checkCode(email: String, data: String, type: String) { +// authService.checkCode(email: email, data: data, type: type) +// .subscribe( +// onSuccess: { [weak self] in +// self?.codeCheckSuccess.onNext(()) +// }, +// onFailure: { [weak self] error in +// self?.authFail.onNext(error) +// } +// ) +// .disposed(by: disposeBag) +// } +// +// public func signUp(emailCode: String, studentKey: String, name: String, email: String, password: String, githubLink: String?) { +// authService.signUp(emailCode: emailCode, studentKey: studentKey, name: name, email: email, password: password, githubLink: githubLink) +// .subscribe( +// onSuccess: { [weak self] in +// self?.signUpSuccess.onNext(()) +// }, +// onFailure: { [weak self] error in +// self?.authFail.onNext(error) +// } +// ) +// .disposed(by: disposeBag) +// } +// +// public func reissueToken() { +// authService.reissueToken() +// .subscribe( +// onSuccess: { [weak self] token in +// self?.tokenReissued.onNext(token) +// }, +// onFailure: { [weak self] error in +// self?.authFail.onNext(error) +// } +// ) +// .disposed(by: disposeBag) +// } +// +// public func checkTokenTime(token: String) { +// authService.checkTokenTime(token: token) +// .subscribe( +// onSuccess: { [weak self] remainingTime in +// self?.tokenTimeChecked.onNext(remainingTime) +// }, +// onFailure: { [weak self] error in +// self?.authFail.onNext(error) +// } +// ) +// .disposed(by: disposeBag) +// } +//} From 37762d7dfe63e7e1c66d899f56de9cbd61944268 Mon Sep 17 00:00:00 2001 From: junha Date: Wed, 21 Jun 2023 10:24:15 +0900 Subject: [PATCH 3/8] Feat:: AdvertisementView --- .../Sources/ModuleFactory/ModuleFactory.swift | 6 ++ .../MOUImage.imageset/Contents.json | 21 +++++ .../MOUImage.imageset/MOUImage.png | Bin 0 -> 75826 bytes .../InfoView/Main/AdvertisementView.swift | 76 ++++++++++++++++++ .../Interface/ModuleFactoryInterface.swift | 1 + .../Sources/Tabbar/TabbarViewController.swift | 44 +++++----- 6 files changed, 130 insertions(+), 18 deletions(-) create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/MOUImage.imageset/Contents.json create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/MOUImage.imageset/MOUImage.png create mode 100644 Projects/Modules/INFOKit/Sources/DesignSystem/InfoView/Main/AdvertisementView.swift diff --git a/Projects/INFO-iOS/Sources/ModuleFactory/ModuleFactory.swift b/Projects/INFO-iOS/Sources/ModuleFactory/ModuleFactory.swift index 7396063..6a85b97 100644 --- a/Projects/INFO-iOS/Sources/ModuleFactory/ModuleFactory.swift +++ b/Projects/INFO-iOS/Sources/ModuleFactory/ModuleFactory.swift @@ -25,4 +25,10 @@ extension ModuleFactory: ModuleFactoryInterface { return tabbarVC } + + public func companyListVC() -> CompanyListViewController { + let companyListVC = CompanyListViewController() + + return companyListVC + } } diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/MOUImage.imageset/Contents.json b/Projects/Modules/INFOKit/Resources/Assets.xcassets/MOUImage.imageset/Contents.json new file mode 100644 index 0000000..20cafd4 --- /dev/null +++ b/Projects/Modules/INFOKit/Resources/Assets.xcassets/MOUImage.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "MOUImage.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/MOUImage.imageset/MOUImage.png b/Projects/Modules/INFOKit/Resources/Assets.xcassets/MOUImage.imageset/MOUImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9d529796bef34472cbb235c133fc542af12c9af4 GIT binary patch literal 75826 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 LoginViewController func signupVC() -> SignupViewController func tabBarVC() -> TapBarViewController + func companyListVC() -> CompanyListViewController } diff --git a/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift b/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift index 88dca8f..c256716 100644 --- a/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift +++ b/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift @@ -3,46 +3,54 @@ import UIKit import Then import SnapKit -public class TapBarViewController : UITabBarController { - +public class TapBarViewController: UITabBarController { + public var factory: ModuleFactoryInterface! - + public override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - - let homeVC = UINavigationController(rootViewController: UIViewController()) + + let homeVC = UINavigationController(rootViewController: CompanyListViewController()) let tabOneBarItem = UITabBarItem(title: "회사목록", - image: INFOKitAsset.Assets.companyList.image, + image: INFOKitAsset.Assets.companyListImage.image, tag: 1) - + homeVC.tabBarItem = tabOneBarItem - + let boardVC = UINavigationController(rootViewController: UIViewController()) let tabTwoBarItem2 = UITabBarItem(title: "모집공고", - image: INFOKitAsset.Assets.recruitmentAnnouncement.image, + image: INFOKitAsset.Assets.recruitmentAnnouncementImage.image, tag: 2) boardVC.tabBarItem = tabTwoBarItem2 - + let tendinousVC = UINavigationController(rootViewController: UIViewController()) let tabThrBarItem3 = UITabBarItem(title: "공지사항", - image: INFOKitAsset.Assets.announcement.image, + image: INFOKitAsset.Assets.announcementImage.image, tag: 3) - + tendinousVC.tabBarItem = tabThrBarItem3 - + let reviewVC = UINavigationController(rootViewController: UIViewController()) let tabFouBarItem4 = UITabBarItem(title: "내정보", - image: INFOKitAsset.Assets.myPage.image, + image: INFOKitAsset.Assets.myPageImage.image, tag: 4) - + reviewVC.tabBarItem = tabFouBarItem4 - - + self.tabBar.tintColor = INFOKitAsset.Colors.mainColor.color self.tabBar.unselectedItemTintColor = INFOKitAsset.Colors.thinGrayColor.color self.viewControllers = [homeVC, boardVC, tendinousVC, reviewVC] self.tabBar.backgroundColor = .white - +// let separatorView = UIView() +// separatorView.backgroundColor = UIColor.lightGray +// +// separatorView.snp.makeConstraints { make in +// make.height.equalTo(1) +// make.left.right.equalToSuperview() +// make.bottom.equalTo(self.tabBar.snp.top) +// } +// +// self.tabBar.addSubview(separatorView) } } From 17ed15a9ff7547e9dd3d9b417a565c828f106d85 Mon Sep 17 00:00:00 2001 From: junha Date: Wed, 21 Jun 2023 10:24:39 +0900 Subject: [PATCH 4/8] Feat:: AdvertisementView apply --- .../Sources/Application/SceneDelegate.swift | 2 +- .../Main/VC/CompanyListViewController.swift | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift diff --git a/Projects/INFO-iOS/Sources/Application/SceneDelegate.swift b/Projects/INFO-iOS/Sources/Application/SceneDelegate.swift index 3edd160..eab003b 100644 --- a/Projects/INFO-iOS/Sources/Application/SceneDelegate.swift +++ b/Projects/INFO-iOS/Sources/Application/SceneDelegate.swift @@ -14,7 +14,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window?.windowScene = scene let moduleFactory = ModuleFactory.shared - let rootViewController = moduleFactory.signupVC() + let rootViewController = moduleFactory.tabBarVC() window?.rootViewController = UINavigationController(rootViewController: rootViewController) window?.makeKeyAndVisible() diff --git a/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift b/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift new file mode 100644 index 0000000..a015905 --- /dev/null +++ b/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift @@ -0,0 +1,36 @@ +import UIKit +import SnapKit +import Then +import RxCocoa +import RxSwift +import Core +import INFOKit +import INetwork + +public class CompanyListViewController: UIViewController { + + private lazy var advertisementView = AdvertisementView(frame: .zero, viewController: self, mainTitleText: "이번 년도에는 총 100개의\n회사와 MOU를 맺었어요", subTitleText: "DSM의 회사 목록을 확인해보세요! - 2022.12.30 기준").then { + $0.layer.cornerRadius = 8.97 + $0.backgroundColor = INFOKitAsset.Colors.mainColor.color + } + + public override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .white + navigationController?.setNavigationBarHidden(true, animated: true) + layout() + } + + func layout() { + + view.addSubview(advertisementView) + + advertisementView.snp.makeConstraints { + $0.top.equalTo(view.safeAreaLayoutGuide).offset(20.0) + $0.centerX.equalToSuperview() + $0.width.equalTo(370.0) + $0.height.equalTo(130.0) + } + } +} From 46e276b71aaacf999598bead81074e732c7280df Mon Sep 17 00:00:00 2001 From: junha Date: Wed, 21 Jun 2023 11:17:37 +0900 Subject: [PATCH 5/8] Feat:: infoSearchBar --- .../InfoSearchBar/InfoSearchBar.swift | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Projects/Modules/INFOKit/Sources/DesignSystem/InfoSearchBar/InfoSearchBar.swift diff --git a/Projects/Modules/INFOKit/Sources/DesignSystem/InfoSearchBar/InfoSearchBar.swift b/Projects/Modules/INFOKit/Sources/DesignSystem/InfoSearchBar/InfoSearchBar.swift new file mode 100644 index 0000000..4721196 --- /dev/null +++ b/Projects/Modules/INFOKit/Sources/DesignSystem/InfoSearchBar/InfoSearchBar.swift @@ -0,0 +1,88 @@ +import UIKit +import SnapKit +import Then +import RxCocoa +import RxSwift +import Core +import INetwork + +public class InfoSearchBar: UISearchBar { + public var customPlaceholder: String? { + didSet { + updatePlaceholder() + } + } + + public var placeholderFont: UIFont? { + didSet { + updatePlaceholderFont() + } + } + + public var placeholderFontSize: CGFloat = 14.0 { + didSet { + updatePlaceholderFont() + } + } + + override public init(frame: CGRect) { + super.init(frame: frame) + setupSearchBar() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupSearchBar() + } + + private func setupSearchBar() { + searchBarStyle = .minimal + layer.cornerRadius = bounds.height / 2.0 + layer.masksToBounds = true + layer.borderColor = INFOKitAsset.Colors.mainColor.color.cgColor + layer.borderWidth = 1.0 + + let searchIcon = UIImage(systemName: "magnifyingglass")?.withTintColor(INFOKitAsset.Colors.mainColor.color, renderingMode: .alwaysOriginal) + setImage(searchIcon, for: .search, state: .normal) + + if let textField = value(forKey: "searchField") as? UITextField { + textField.textColor = .black + textField.backgroundColor = .clear + textField.font = .systemFont(ofSize: 14.0, weight: .medium) + + if let backgroundView = textField.subviews.first { + backgroundView.subviews.forEach { subview in + subview.removeFromSuperview() + } + } + } + + if let cancelButton = value(forKey: "cancelButton") as? UIButton { + cancelButton.setTitleColor(INFOKitAsset.Colors.mainColor.color, for: .normal) + } + + updatePlaceholder() + updatePlaceholderFont() + } + + private func updatePlaceholder() { + if let textField = value(forKey: "searchField") as? UITextField { + textField.placeholder = customPlaceholder + } + } + + private func updatePlaceholderFont() { + if let textField = value(forKey: "searchField") as? UITextField { + if let placeholderFont = placeholderFont { + let attributes: [NSAttributedString.Key: Any] = [ + .font: placeholderFont, + .foregroundColor: INFOKitAsset.Colors.thinGrayColor.color + ] + textField.attributedPlaceholder = NSAttributedString(string: customPlaceholder ?? "", attributes: attributes) + } else { + textField.attributedPlaceholder = nil + textField.placeholder = customPlaceholder + } + } + } +} From a8c7774bedf8bdf16b3b31b9bd64fb7cfc8b9549 Mon Sep 17 00:00:00 2001 From: junha Date: Wed, 21 Jun 2023 11:17:49 +0900 Subject: [PATCH 6/8] Feat:: infoSearchBar apply --- .../Main/VC/CompanyListViewController.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift b/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift index a015905..13ae2fd 100644 --- a/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift +++ b/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift @@ -14,6 +14,13 @@ public class CompanyListViewController: UIViewController { $0.backgroundColor = INFOKitAsset.Colors.mainColor.color } + private let searchBar = InfoSearchBar().then { + $0.layer.cornerRadius = 23.13 + $0.customPlaceholder = "검색어를 입력해주세요. (ex. 회사, 직군 등)" + $0.placeholderFont = UIFont.systemFont(ofSize: 10.0, weight: .medium) + $0.placeholderFontSize = 10.0 + } + public override func viewDidLoad() { super.viewDidLoad() @@ -32,5 +39,15 @@ public class CompanyListViewController: UIViewController { $0.width.equalTo(370.0) $0.height.equalTo(130.0) } + + view.addSubview(searchBar) + + searchBar.snp.makeConstraints { + $0.leading.equalToSuperview().offset(30) + $0.trailing.equalToSuperview().offset(-30) + $0.top.equalTo(advertisementView.snp.bottom).offset(30) + $0.height.equalTo(44.0) + } } } + From 103730bf05638ad20b614cd178818ddaba43a992 Mon Sep 17 00:00:00 2001 From: junha Date: Wed, 21 Jun 2023 15:04:34 +0900 Subject: [PATCH 7/8] Feat:: collectionView shape finish --- .../Main/VC/CompanyListViewController.swift | 58 +++++++++++++++++ .../Main/VC/InfoCollectionViewCell.swift | 64 +++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 Projects/Presentation/Sources/Main/VC/InfoCollectionViewCell.swift diff --git a/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift b/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift index 13ae2fd..def2461 100644 --- a/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift +++ b/Projects/Presentation/Sources/Main/VC/CompanyListViewController.swift @@ -21,12 +21,29 @@ public class CompanyListViewController: UIViewController { $0.placeholderFontSize = 10.0 } + private lazy var collectionView: UICollectionView = { + let layout = UICollectionViewFlowLayout() + let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) + collectionView.translatesAutoresizingMaskIntoConstraints = false + return collectionView + }() + public override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white navigationController?.setNavigationBarHidden(true, animated: true) layout() + setupCollectionView() + } + + private func setupCollectionView() { + collectionView.register(InfoCollectionViewCell.self, forCellWithReuseIdentifier: InfoCollectionViewCell.id) + collectionView.delegate = self + collectionView.dataSource = self + collectionView.backgroundColor = .red + collectionView.alwaysBounceVertical = true + collectionView.contentInset = UIEdgeInsets(top: 0, left: 30, bottom: 20, right: 30) } func layout() { @@ -48,6 +65,47 @@ public class CompanyListViewController: UIViewController { $0.top.equalTo(advertisementView.snp.bottom).offset(30) $0.height.equalTo(44.0) } + + view.addSubview(collectionView) + + collectionView.snp.makeConstraints { + $0.top.equalTo(searchBar.snp.bottom).offset(20.0) + $0.trailing.leading.bottom.equalToSuperview() + } } } + +extension CompanyListViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { + public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: InfoCollectionViewCell.id, for: indexPath) as? InfoCollectionViewCell else { + return UICollectionViewCell() + } + + cell.layout() + cell.layer.cornerRadius = 9.25 + + return cell + } + + public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return 4 + } + + public func numberOfSections(in collectionView: UICollectionView) -> Int { + return 1 + } + + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { + return 30.0 + } + + public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + + print(indexPath.row) + } + + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + return CGSize(width: collectionView.bounds.width - 60, height: 110) + } +} diff --git a/Projects/Presentation/Sources/Main/VC/InfoCollectionViewCell.swift b/Projects/Presentation/Sources/Main/VC/InfoCollectionViewCell.swift new file mode 100644 index 0000000..7ff8800 --- /dev/null +++ b/Projects/Presentation/Sources/Main/VC/InfoCollectionViewCell.swift @@ -0,0 +1,64 @@ +import UIKit +import SnapKit +import Then +import RxCocoa +import RxSwift +import Core +import INFOKit +import INetwork + +class InfoCollectionViewCell: UICollectionViewCell { + + static var id: String = "InfoCollectionViewCell" + + private var imageView = UIImageView().then { + $0.backgroundColor = .blue + } + + private var mainTitle = UILabel().then { + $0.text = "(주)순양 물산" + $0.textColor = .black + $0.font = .systemFont(ofSize: 15.0, weight: .bold) + } + + private var subTitle = UITextView().then { + $0.text = "운송업을 주 사업으로 활동하는 회사 입니다." + $0.textColor = .black + $0.font = .systemFont(ofSize: 10.0, weight: .medium) + } + + override init(frame: CGRect) { + super.init(frame: frame) + layout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func layout() { + self.backgroundColor = .yellow + + contentView.addSubview(imageView) + contentView.addSubview(mainTitle) + contentView.addSubview(subTitle) + + imageView.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.height.width.equalTo(86.0) + $0.leading.equalToSuperview().offset(14.0) + } + + mainTitle.snp.makeConstraints { + $0.top.equalTo(imageView.snp.top) + $0.leading.equalTo(imageView.snp.trailing).offset(14.0) + } + + subTitle.snp.makeConstraints { + $0.top.equalTo(mainTitle.snp.bottom).offset(6.0) + $0.leading.equalTo(mainTitle.snp.leading) + $0.trailing.equalToSuperview().inset(10.0) + $0.bottom.equalTo(imageView.snp.bottom) + } + } +} From 2215507a64064323edaa0cd52f5dd5e079ed2630 Mon Sep 17 00:00:00 2001 From: junha Date: Wed, 21 Jun 2023 15:18:33 +0900 Subject: [PATCH 8/8] Feat:: collectionView finish --- .../announcementImage.imageset/Contents.json | 3 --- .../companyListImage.imageset/Contents.json | 3 --- .../defaultImg.imageset/Contents.json | 21 ++++++++++++++++++ .../defaultImg.imageset/defaultImg.png | Bin 0 -> 4334 bytes .../myPageImage.imageset/Contents.json | 3 --- .../Contents.json | 3 --- .../Main/VC/CompanyListViewController.swift | 4 ++-- .../Main/VC/InfoCollectionViewCell.swift | 16 ++++++++++--- .../Sources/Tabbar/TabbarViewController.swift | 11 --------- 9 files changed, 36 insertions(+), 28 deletions(-) create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/defaultImg.imageset/Contents.json create mode 100644 Projects/Modules/INFOKit/Resources/Assets.xcassets/defaultImg.imageset/defaultImg.png diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/Contents.json b/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/Contents.json index fc4506d..16177bb 100644 --- a/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/Contents.json +++ b/Projects/Modules/INFOKit/Resources/Assets.xcassets/announcementImage.imageset/Contents.json @@ -17,8 +17,5 @@ "info" : { "author" : "xcode", "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "original" } } diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/Contents.json b/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/Contents.json index aee7990..977ea71 100644 --- a/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/Contents.json +++ b/Projects/Modules/INFOKit/Resources/Assets.xcassets/companyListImage.imageset/Contents.json @@ -17,8 +17,5 @@ "info" : { "author" : "xcode", "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "original" } } diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/defaultImg.imageset/Contents.json b/Projects/Modules/INFOKit/Resources/Assets.xcassets/defaultImg.imageset/Contents.json new file mode 100644 index 0000000..5d04dd1 --- /dev/null +++ b/Projects/Modules/INFOKit/Resources/Assets.xcassets/defaultImg.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "defaultImg.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Modules/INFOKit/Resources/Assets.xcassets/defaultImg.imageset/defaultImg.png b/Projects/Modules/INFOKit/Resources/Assets.xcassets/defaultImg.imageset/defaultImg.png new file mode 100644 index 0000000000000000000000000000000000000000..686c87244d7f305fefd27cf331358d1fa2b2f1e0 GIT binary patch literal 4334 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 CGFloat { - return 30.0 + return 20.0 } public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { diff --git a/Projects/Presentation/Sources/Main/VC/InfoCollectionViewCell.swift b/Projects/Presentation/Sources/Main/VC/InfoCollectionViewCell.swift index 7ff8800..40f7fbc 100644 --- a/Projects/Presentation/Sources/Main/VC/InfoCollectionViewCell.swift +++ b/Projects/Presentation/Sources/Main/VC/InfoCollectionViewCell.swift @@ -12,7 +12,7 @@ class InfoCollectionViewCell: UICollectionViewCell { static var id: String = "InfoCollectionViewCell" private var imageView = UIImageView().then { - $0.backgroundColor = .blue + $0.image = INFOKitAsset.Assets.defaultImage.image } private var mainTitle = UILabel().then { @@ -25,11 +25,13 @@ class InfoCollectionViewCell: UICollectionViewCell { $0.text = "운송업을 주 사업으로 활동하는 회사 입니다." $0.textColor = .black $0.font = .systemFont(ofSize: 10.0, weight: .medium) + $0.isEditable = false } override init(frame: CGRect) { super.init(frame: frame) layout() + applyShadow() } required init?(coder: NSCoder) { @@ -37,7 +39,7 @@ class InfoCollectionViewCell: UICollectionViewCell { } func layout() { - self.backgroundColor = .yellow + self.backgroundColor = .white contentView.addSubview(imageView) contentView.addSubview(mainTitle) @@ -55,10 +57,18 @@ class InfoCollectionViewCell: UICollectionViewCell { } subTitle.snp.makeConstraints { - $0.top.equalTo(mainTitle.snp.bottom).offset(6.0) + $0.top.equalTo(mainTitle.snp.bottom) $0.leading.equalTo(mainTitle.snp.leading) $0.trailing.equalToSuperview().inset(10.0) $0.bottom.equalTo(imageView.snp.bottom) } } + + func applyShadow() { + layer.shadowColor = UIColor.gray.cgColor + layer.shadowOpacity = 0.5 + layer.shadowOffset = CGSize(width: 2, height: 2) + layer.shadowRadius = 4 + layer.masksToBounds = false + } } diff --git a/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift b/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift index c256716..f27c8d0 100644 --- a/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift +++ b/Projects/Presentation/Sources/Tabbar/TabbarViewController.swift @@ -41,16 +41,5 @@ public class TapBarViewController: UITabBarController { self.tabBar.unselectedItemTintColor = INFOKitAsset.Colors.thinGrayColor.color self.viewControllers = [homeVC, boardVC, tendinousVC, reviewVC] self.tabBar.backgroundColor = .white - -// let separatorView = UIView() -// separatorView.backgroundColor = UIColor.lightGray -// -// separatorView.snp.makeConstraints { make in -// make.height.equalTo(1) -// make.left.right.equalToSuperview() -// make.bottom.equalTo(self.tabBar.snp.top) -// } -// -// self.tabBar.addSubview(separatorView) } }