diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS.xcodeproj/project.pbxproj b/SOPKATHON_33-iOS/SOPKATHON_33-iOS.xcodeproj/project.pbxproj index 6eea410..fd70480 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS.xcodeproj/project.pbxproj +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS.xcodeproj/project.pbxproj @@ -31,6 +31,9 @@ D26AFFE82B127673007B90DF /* MoyaService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D26AFFE72B127673007B90DF /* MoyaService.swift */; }; D26AFFEA2B12767B007B90DF /* MoyaAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = D26AFFE92B12767B007B90DF /* MoyaAPI.swift */; }; D26AFFEC2B127B0F007B90DF /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D26AFFEB2B127B0F007B90DF /* BaseViewController.swift */; }; + D26AFFEE2B128915007B90DF /* GelationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D26AFFED2B128915007B90DF /* GelationModel.swift */; }; + D26AFFF02B1291DC007B90DF /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D26AFFEF2B1291DC007B90DF /* ProgressView.swift */; }; + D26AFFF22B129A8F007B90DF /* ProgramModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D26AFFF12B129A8F007B90DF /* ProgramModel.swift */; }; D28379A12B0FB83A00A1903B /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = D28379A02B0FB83A00A1903B /* SnapKit */; }; D28379A42B0FB84300A1903B /* Then in Frameworks */ = {isa = PBXBuildFile; productRef = D28379A32B0FB84300A1903B /* Then */; }; D28379A72B0FB86500A1903B /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = D28379A62B0FB86500A1903B /* Moya */; }; @@ -101,6 +104,9 @@ D26AFFE72B127673007B90DF /* MoyaService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoyaService.swift; sourceTree = ""; }; D26AFFE92B12767B007B90DF /* MoyaAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoyaAPI.swift; sourceTree = ""; }; D26AFFEB2B127B0F007B90DF /* BaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = ""; }; + D26AFFED2B128915007B90DF /* GelationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GelationModel.swift; sourceTree = ""; }; + D26AFFEF2B1291DC007B90DF /* ProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressView.swift; sourceTree = ""; }; + D26AFFF12B129A8F007B90DF /* ProgramModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgramModel.swift; sourceTree = ""; }; D28379B82B0FBBEA00A1903B /* UIApplication+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+.swift"; sourceTree = ""; }; D28379BA2B0FBBF500A1903B /* UIButton+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+.swift"; sourceTree = ""; }; D28379BC2B0FBC0400A1903B /* UICollectionReuseableView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UICollectionReuseableView+.swift"; sourceTree = ""; }; @@ -206,6 +212,7 @@ A19A1F5A2B1255CF0077ACEC /* ActivityStackView.swift */, A19A1F5C2B1258490077ACEC /* ActivityStackViewItem.swift */, A13161442B12749800883CB2 /* UserInfoChipView.swift */, + D26AFFEF2B1291DC007B90DF /* ProgressView.swift */, ); path = View; sourceTree = ""; @@ -288,6 +295,8 @@ isa = PBXGroup; children = ( D26AFFDF2B1275B2007B90DF /* MainModel.swift */, + D26AFFED2B128915007B90DF /* GelationModel.swift */, + D26AFFF12B129A8F007B90DF /* ProgramModel.swift */, ); path = Main; sourceTree = ""; @@ -583,14 +592,17 @@ D26AFFEA2B12767B007B90DF /* MoyaAPI.swift in Sources */, D28379D92B0FBE5C00A1903B /* NetworkResult.swift in Sources */, A19A1F522B12451B0077ACEC /* MainViewController.swift in Sources */, + D26AFFF22B129A8F007B90DF /* ProgramModel.swift in Sources */, D28379FC2B0FC53500A1903B /* Device.swift in Sources */, A13161452B12749800883CB2 /* UserInfoChipView.swift in Sources */, E5CD4BF22B124BD600CF9D17 /* GelationCollectionViewCell.swift in Sources */, E5CD4BF72B12637800CF9D17 /* CustomNavigationBarView.swift in Sources */, D28379D52B0FBDB300A1903B /* APIConstant.swift in Sources */, D28379DD2B0FBE9C00A1903B /* BaseAPI.swift in Sources */, + D26AFFEE2B128915007B90DF /* GelationModel.swift in Sources */, D28379BF2B0FBC0F00A1903B /* UICollectionViewCell++.swift in Sources */, D28379D12B0FBC7600A1903B /* UIViewController+.swift in Sources */, + D26AFFF02B1291DC007B90DF /* ProgressView.swift in Sources */, D28379CD2B0FBC5F00A1903B /* UITextField+.swift in Sources */, D206CADC2B0FB748007ECC1B /* ViewController.swift in Sources */, D28379C72B0FBC4100A1903B /* UIStackView+.swift in Sources */, diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Data/Main/GelationModel.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Data/Main/GelationModel.swift new file mode 100644 index 0000000..3e29dd6 --- /dev/null +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Data/Main/GelationModel.swift @@ -0,0 +1,12 @@ +// +// GelationModel.swift +// SOPKATHON_33-iOS +// +// Created by 류희재 on 2023/11/26. +// + +import Foundation + +struct GelationModel: Codable { + let volunteers, programs, certifications: [String] +} diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Data/Main/ProgramModel.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Data/Main/ProgramModel.swift new file mode 100644 index 0000000..2deb6f2 --- /dev/null +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Data/Main/ProgramModel.swift @@ -0,0 +1,23 @@ +// +// ProgramModel.swift +// SOPKATHON_33-iOS +// +// Created by 류희재 on 2023/11/26. +// + +import Foundation + +// MARK: - Datum +struct ProgramModel: Codable { + let programID: Int + let title, registerAt, imageURL, status: String + let region: String + + enum CodingKeys: String, CodingKey { + case programID = "program_id" + case title + case registerAt = "register_at" + case imageURL = "image_url" + case status, region + } +} diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Global/Constant/Image.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Global/Constant/Image.swift index cf8b638..86b75b2 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Global/Constant/Image.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Global/Constant/Image.swift @@ -20,9 +20,12 @@ public enum Image { static let ellipse1 = UIImage(named: "Ellipse 33") static let ellipse2 = UIImage(named: "Ellipse 33-1") static let ellipse3 = UIImage(named: "Ellipse 33-2") - static let star1 = UIImage(named: "ic_card2") - static let star2 = UIImage(named: "ic_card3") - static let card = UIImage(named: "img_card") + static let star1 = UIImage(named: "ic_card1") + static let star2 = UIImage(named: "ic_card2") + static let star3 = UIImage(named: "ic_card3") + static let card = UIImage(named: "img_card1") + static let card2 = UIImage(named: "img_card2") + static let card3 = UIImage(named: "img_card3") static let background = UIImage(named: "img_mainbackground") static let profileCard = UIImage(named: "img_profile") static let logo = UIImage(named: "logo") diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Network/MoyaAPI.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Network/MoyaAPI.swift index 781bf2c..d5e5c9e 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Network/MoyaAPI.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Network/MoyaAPI.swift @@ -23,5 +23,23 @@ extension MoyaAPI { completion: completion) } } + + public func getGelationData(completion: @escaping (NetworkResult) -> Void) { + provider.request(.getGelationData) { (result) in + self.disposeNetwork( + result, + dataModel: GelationModel.self, + completion: completion) + } + } + + public func getProgramData(type: String, completion: @escaping (NetworkResult) -> Void) { + provider.request(.getProgramData(type: type)) { (result) in + self.disposeNetwork( + result, + dataModel: [ProgramModel].self, + completion: completion) + } + } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Network/MoyaService.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Network/MoyaService.swift index ef7d5dd..46f14eb 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Network/MoyaService.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Network/MoyaService.swift @@ -12,6 +12,8 @@ import UIKit enum MoyaService { case getMainData + case getGelationData + case getProgramData(type: String) } extension MoyaService: BaseTargetType { @@ -19,6 +21,10 @@ extension MoyaService: BaseTargetType { switch self { case .getMainData: return "/api/v1/user/info/\(1)" + case .getGelationData: + return "/api/v1/user/info/detail/\(1)" + case .getProgramData: + return "/api/v1/program" } } @@ -26,6 +32,10 @@ extension MoyaService: BaseTargetType { switch self { case .getMainData: return .get + case .getGelationData: + return .get + case .getProgramData: + return .get } } @@ -34,6 +44,10 @@ extension MoyaService: BaseTargetType { switch self { case .getMainData: return .requestPlain + case .getGelationData: + return .requestPlain + case .getProgramData(let type): + return .requestParameters(parameters: ["program_type": type], encoding: URLEncoding.default) } } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Base/TabBarController.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Base/TabBarController.swift index 18d891a..c983c16 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Base/TabBarController.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Base/TabBarController.swift @@ -17,6 +17,7 @@ final class TabBarController: UITabBarController { setUI() setTabBar() view.backgroundColor = .white + view.tintColor = .white } private func setUI() { @@ -27,9 +28,10 @@ final class TabBarController: UITabBarController { let firstVc = MainViewController() let secondVc = ProgramViewController() - firstVc.tabBarItem = UITabBarItem(title: "tab1" , image: .checkmark, tag: 0) - secondVc.tabBarItem = UITabBarItem(title: "tab2", image: .add, tag: 1) + firstVc.tabBarItem = UITabBarItem(title: nil, image: Image.tabBarItem1Unselected, selectedImage: Image.tabBarItem1Selected) + secondVc.tabBarItem = UITabBarItem(title: nil, image: Image.tabBarItem2Unselected, selectedImage: Image.tabBarItem2Selected) + self.viewControllers = [firstVc, secondVc] setViewControllers(viewControllers, animated: true) } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Detail/ViewController/DetailViewController.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Detail/ViewController/DetailViewController.swift index 374d615..9f88426 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Detail/ViewController/DetailViewController.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Detail/ViewController/DetailViewController.swift @@ -19,8 +19,16 @@ final class DetailViewController: UIViewController { private let scrollView = UIScrollView() private var contentView = UIView() let titleLabel = UILabel() - let bodyLabel = UILabel() private let lineView = UIView() + let bodyLabel = UILabel() + let agencyKeyLabel = UILabel() + let agencyValueLabel = UILabel() + let dateKeyLabel = UILabel() + let dateValueLabel = UILabel() + let timeKeyLabel = UILabel() + let timeValueLabel = UILabel() + let salaryKeyLabel = UILabel() + let salaryValueLabel = UILabel() private let applyView = UIView() private lazy var applyButton = UIButton() @@ -29,7 +37,7 @@ final class DetailViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - view.backgroundColor = .white + view.backgroundColor = .gray700 setNavigation() setUI() } @@ -50,35 +58,95 @@ extension DetailViewController { private func setStyle() { backButton.do { $0.setImage(UIImage(systemName: "chevron.backward"), for: .normal) - $0.tintColor = .black + $0.tintColor = .white + } + + backgroundImageView.do { + $0.image = Image.dummy1 } scrollView.do { $0.showsVerticalScrollIndicator = false $0.alwaysBounceVertical = true - $0.contentInset = .init(top: 400, left: 0, bottom: 0, right: 0) + $0.contentInset = .init(top: 225, left: 0, bottom: 0, right: 0) } titleLabel.do { $0.text = "솝트와 함께하는 플로깅 봉사솝트와 함께하는 플로깅 봉사" - $0.font = UIFont.boldSystemFont(ofSize: 20) - $0.textColor = .black + $0.font = UIFont(name: "Pretendard-SemiBold", size: 20) + $0.textColor = .white $0.numberOfLines = 0 } + lineView.do { + $0.backgroundColor = .gray500 + } + bodyLabel.do { $0.text = "지역 플로깅을 통해 지역 사회에 기여하세요." - $0.font = UIFont.systemFont(ofSize: 12) - $0.textColor = .black + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .white $0.numberOfLines = 0 } - lineView.do { - $0.backgroundColor = .black + agencyKeyLabel.do { + $0.text = "기관명" + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .gray400 + $0.numberOfLines = 0 + } + + agencyValueLabel.do { + $0.text = "노인종합지원센터" + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .gray400 + $0.numberOfLines = 0 + } + + dateKeyLabel.do { + $0.text = "업로드 날짜" + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .gray400 + $0.numberOfLines = 0 + } + + dateValueLabel.do { + $0.text = "11월 08일" + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .gray400 + $0.numberOfLines = 0 + } + + timeKeyLabel.do { + $0.text = "봉사 시간" + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .gray400 + $0.numberOfLines = 0 + } + + timeValueLabel.do { + $0.text = "8시간" + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .gray400 + $0.numberOfLines = 0 + } + + salaryKeyLabel.do { + $0.text = "월급" + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .gray400 + $0.numberOfLines = 0 + } + + salaryValueLabel.do { + $0.text = "2,690,000원" + $0.font = UIFont(name: "Pretendard-Regular", size: 14) + $0.textColor = .gray400 + $0.numberOfLines = 0 } applyView.do { - $0.backgroundColor = .white + $0.backgroundColor = .gray700 } applyButton.do { @@ -95,7 +163,7 @@ extension DetailViewController { backgroundImageView.snp.makeConstraints { $0.top.leading.trailing.equalToSuperview() - $0.bottom.equalTo(applyView.snp.top) + $0.height.equalTo(243) } backgroundImageView.addSubview(backButton) @@ -118,25 +186,69 @@ extension DetailViewController { $0.width.equalToSuperview() } - contentView.addSubviews(titleLabel, bodyLabel, lineView) + contentView.addSubviews(titleLabel, lineView, bodyLabel, agencyKeyLabel, agencyValueLabel, dateKeyLabel, dateValueLabel, timeKeyLabel, timeValueLabel, salaryKeyLabel, salaryValueLabel) titleLabel.snp.makeConstraints { $0.top.equalToSuperview() $0.leading.trailing.equalToSuperview().inset(20) } + lineView.snp.makeConstraints { + $0.top.equalTo(titleLabel.snp.bottom).offset(15) + $0.leading.trailing.equalTo(titleLabel) + $0.height.equalTo(0.5) + } + bodyLabel.snp.makeConstraints { - $0.top.equalTo(titleLabel.snp.bottom).offset(12) + $0.top.equalTo(lineView.snp.bottom).offset(15) $0.leading.trailing.equalTo(titleLabel) } - lineView.snp.makeConstraints { + agencyKeyLabel.snp.makeConstraints { $0.top.equalTo(bodyLabel.snp.bottom).offset(15) $0.leading.trailing.equalTo(titleLabel) - $0.height.equalTo(0.5) + } + + agencyValueLabel.snp.makeConstraints { + $0.top.equalTo(agencyKeyLabel) + $0.leading.equalToSuperview().inset(115) + $0.trailing.equalToSuperview().inset(20) + } + + dateKeyLabel.snp.makeConstraints { + $0.top.equalTo(agencyKeyLabel.snp.bottom).offset(10) + $0.leading.trailing.equalTo(titleLabel) + } + + dateValueLabel.snp.makeConstraints { + $0.top.equalTo(dateKeyLabel) + $0.leading.equalToSuperview().inset(115) + $0.trailing.equalToSuperview().inset(20) + } + + timeKeyLabel.snp.makeConstraints { + $0.top.equalTo(dateKeyLabel.snp.bottom).offset(10) + $0.leading.trailing.equalTo(titleLabel) + } + + timeValueLabel.snp.makeConstraints { + $0.top.equalTo(timeKeyLabel) + $0.leading.equalToSuperview().inset(115) + $0.trailing.equalToSuperview().inset(20) + } + + salaryKeyLabel.snp.makeConstraints { + $0.top.equalTo(timeKeyLabel.snp.bottom).offset(10) + $0.leading.trailing.equalTo(titleLabel) $0.bottom.equalToSuperview() } + salaryValueLabel.snp.makeConstraints { + $0.top.equalTo(salaryKeyLabel) + $0.leading.equalToSuperview().inset(115) + $0.trailing.equalToSuperview().inset(20) + } + applyView.snp.makeConstraints { $0.leading.trailing.bottom.equalToSuperview() $0.height.equalTo(107) diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/Cell/GelationCollectionViewCell.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/Cell/GelationCollectionViewCell.swift index 5e9de66..0714ea6 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/Cell/GelationCollectionViewCell.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/Cell/GelationCollectionViewCell.swift @@ -9,9 +9,11 @@ import UIKit class GelationCollectionViewCell: UICollectionViewCell { - private var backgroundImage = UIView() + private var backgroundImage = UIImageView() private var cardTitle = UILabel() - private var cardIcon = UIImage() + private var cardIcon1 = UIImage() + private var cardIcon2 = UIImage() + private var cardIcon3 = UIImage() private var list1 = UILabel() private var list2 = UILabel() private var list3 = UILabel() @@ -32,13 +34,12 @@ class GelationCollectionViewCell: UICollectionViewCell { fatalError("init(coder:) has not been implemented") } - func bindData(data: GelationData) { - self.backgroundImage = data.backgroundImage - self.cardTitle.text = data.cardTitle - self.list1.text = data.list1 - self.list2.text = data.list2 - self.list3.text = data.list3 - self.list4.text = data.list4 + func bindData(title: String, data: [String]) { + self.cardTitle.text = title + self.list1.text = data[0] + self.list2.text = data[1] + self.list3.text = data[2] + self.list4.text = data[3] } @@ -53,57 +54,61 @@ class GelationCollectionViewCell: UICollectionViewCell { } cardTitle.snp.makeConstraints { - $0.leading.equalTo(backgroundImage.snp.leading).inset(23.adjusted) - $0.top.equalTo(backgroundImage.snp.top).inset(85.adjusted) + $0.leading.equalTo(backgroundImage.snp.leading).inset(25.adjusted) + $0.top.equalTo(backgroundImage.snp.top).inset(99.adjusted) $0.width.equalTo(50) } list1.snp.makeConstraints { - $0.leading.equalToSuperview().inset(150.adjusted) + $0.leading.equalToSuperview().inset(118.adjusted) $0.top.equalToSuperview().inset(20.adjusted) } list2.snp.makeConstraints { - $0.leading.equalToSuperview().inset(150.adjusted) + $0.leading.equalToSuperview().inset(118.adjusted) $0.top.equalToSuperview().inset(47.adjusted) } list3.snp.makeConstraints { - $0.leading.equalToSuperview().inset(150.adjusted) + $0.leading.equalToSuperview().inset(118.adjusted) $0.top.equalToSuperview().inset(74.adjusted) } list4.snp.makeConstraints { - $0.leading.equalToSuperview().inset(150.adjusted) + $0.leading.equalToSuperview().inset(118.adjusted) $0.top.equalToSuperview().inset(101.adjusted) } backgroundImage.do { $0.frame = CGRect(x: 0, y: 0, width: 335.adjusted, height: 205.adjusted) - $0.backgroundColor = .white $0.makeCornerRound(radius: 10) + $0.image = Image.card } cardTitle.do { $0.font = UIFont(name: "Pretendard-SemiBold", size: 14.adjusted) - $0.textColor = .white + $0.textColor = .black $0.numberOfLines = 0 } list1.do { $0.font = UIFont(name: "Pretendard-SemiBold", size: 14.adjusted) + $0.textColor = .white } list2.do { $0.font = UIFont(name: "Pretendard-SemiBold", size: 14.adjusted) + $0.textColor = .white } list3.do { $0.font = UIFont(name: "Pretendard-SemiBold", size: 14.adjusted) + $0.textColor = .white } list4.do { $0.font = UIFont(name: "Pretendard-SemiBold", size: 14.adjusted) + $0.textColor = .white } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/View/CustomNavigationBarView.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/View/CustomNavigationBarView.swift index d56fe8b..ea199e0 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/View/CustomNavigationBarView.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/View/CustomNavigationBarView.swift @@ -11,13 +11,6 @@ import SnapKit class CustomGelationNavigationView: UIView { - private let gelationViewbackButton: UIButton = { - let button = UIButton(type: .custom) - button.setImage(UIImage(systemName: "chevron.backward"), for: .normal) - button.tintColor = .white - return button - }() - private let gelationViewTitle: UILabel = { let label = UILabel() label.text = "교화 활동" @@ -45,20 +38,15 @@ class CustomGelationNavigationView: UIView { private func setLayout() { - addSubviews(gelationViewbackButton, gelationViewTitle) + addSubviews(gelationViewTitle) self.snp.makeConstraints { $0.height.equalTo(52) } - gelationViewbackButton.snp.makeConstraints { - $0.top.equalToSuperview() - $0.leading.equalToSuperview().inset(21) - } - gelationViewTitle.snp.makeConstraints { $0.top.equalToSuperview() - $0.leading.equalTo(gelationViewbackButton.snp.trailing).offset(10) + $0.leading.equalToSuperview().inset(52) } } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/View/GelationDetailView.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/View/GelationDetailView.swift index a2ab612..589dac0 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/View/GelationDetailView.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/GelationDetail/View/GelationDetailView.swift @@ -10,9 +10,10 @@ import UIKit import Then import SnapKit -final class GelationDetailView: UIViewController { +final class GelationDetailView: BaseViewController { let customGelationNavigationView = CustomGelationNavigationView() + var gelationData: GelationModel? = nil override func viewDidLoad() { super.viewDidLoad() @@ -20,55 +21,94 @@ final class GelationDetailView: UIViewController { setLayout() setCollectionView() setCollectionViewLayout() + requestGelationAPI() + } + + @objc func handleListTap() { + navigationController?.popViewController(animated: true) } private func setStyle() { self.navigationController?.navigationBar.isHidden = true + gelationViewbackButton.addTarget(self, action: #selector(handleListTap), for: .touchUpInside) } private func setLayout() { self.view.addSubviews(collectionView, customGelationNavigationView) + customGelationNavigationView.addSubview(gelationViewbackButton) customGelationNavigationView.snp.makeConstraints { $0.top.equalTo(view.safeAreaLayoutGuide) $0.horizontalEdges.equalToSuperview() } + gelationViewbackButton.snp.makeConstraints { + $0.top.equalToSuperview() + $0.leading.equalToSuperview().inset(21) + } + collectionView.snp.makeConstraints{ $0.bottom.leading.trailing.equalToSuperview() $0.top.equalTo(customGelationNavigationView.snp.bottom) - } + } } + private let gelationViewbackButton: UIButton = { + let button = UIButton(type: .custom) + button.setImage(UIImage(systemName: "chevron.backward"), for: .normal) + button.tintColor = .white + return button + }() + private let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout()).then { - $0.backgroundColor = .black - } + $0.backgroundColor = .black + } private func setCollectionView() { - self.collectionView.register(GelationCollectionViewCell.self, - forCellWithReuseIdentifier: GelationCollectionViewCell.identifier) - - self.collectionView.dataSource = self - } + self.collectionView.register(GelationCollectionViewCell.self, + forCellWithReuseIdentifier: GelationCollectionViewCell.identifier) + + self.collectionView.dataSource = self + } + private func setCollectionViewLayout() { - let flowLayout = UICollectionViewFlowLayout() - flowLayout.itemSize = CGSize(width: 335, height: 205) - flowLayout.minimumLineSpacing = 15 - self.collectionView.setCollectionViewLayout(flowLayout, animated: false) + let flowLayout = UICollectionViewFlowLayout() + flowLayout.itemSize = CGSize(width: 335, height: 205) + flowLayout.minimumLineSpacing = 15 + self.collectionView.setCollectionViewLayout(flowLayout, animated: false) + } + + private func requestGelationAPI() { + MoyaAPI.shared.getGelationData { [weak self] result in + guard let result = self?.validateResult(result) as? GelationModel else { return } + self?.gelationData = result + self?.collectionView.reloadData() } + } } extension GelationDetailView: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return gelationData.count + return 3 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { guard let item = collectionView.dequeueReusableCell(withReuseIdentifier: GelationCollectionViewCell.identifier,for: indexPath) as? GelationCollectionViewCell else {return UICollectionViewCell()} - item.bindData(data: gelationData[indexPath.row]) + if !(gelationData?.volunteers.isEmpty ?? true) { + switch indexPath.item { + case 0: + item.bindData(title: "봉사 내역", data: gelationData!.volunteers) + case 1: + item.bindData(title: "이수 프로그램 내역",data: gelationData!.programs) + case 2: + item.bindData(title: "자격증 목록",data: gelationData!.certifications) + default: + break + } + } return item } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/MainViewController.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/MainViewController.swift index ba08bcc..b4d797b 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/MainViewController.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/MainViewController.swift @@ -30,6 +30,21 @@ final class MainViewController: BaseViewController { self.setHierachy() self.setLayout() requestMainData() + activityCardView.progressView1.progressAnimation(duration: 1, value: 0.9) + activityCardView.progressView2.progressAnimation(duration: 1, value: 0.5) + activityCardView.progressView3.progressAnimation(duration: 1, value: 0.6) + + target() + + } + + private func target() { + activityCardView.showDetailButton.addTarget(self, action: #selector(detailButtonDidTap), for: .touchUpInside) + } + + @objc func detailButtonDidTap() { + let gelationDetailVC = GelationDetailView() + self.navigationController?.pushViewController(gelationDetailVC, animated: true) } private func setHierachy() { @@ -67,6 +82,15 @@ final class MainViewController: BaseViewController { MoyaAPI.shared.getMainData { [weak self] result in guard let result = self?.validateResult(result) as? MainModel else { return } self?.mainData = result + self?.dataBind() } } + + private func dataBind() { + DispatchQueue.main.async { + self.idCardView.dataBind(self.mainData) + self.activityCardView.activityStackView.dataBind(self.mainData) + } + + } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ActivityCardView.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ActivityCardView.swift index ae3f972..8bc0297 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ActivityCardView.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ActivityCardView.swift @@ -6,6 +6,7 @@ // import UIKit +import SnapKit final class ActivityCardView: UIView { @@ -14,10 +15,15 @@ final class ActivityCardView: UIView { private let backgroundImageView = UIImageView().then { $0.image = Image.profileCard } - private let ringImageView = UIImageView() - private let activityStackView = ActivityStackView() + let progressView1 = ProgressView(frame: .init(origin: .zero, size: .init(width: 187,height: 187))) + + let progressView2 = ProgressView(frame: .init(origin: .zero, size: .init(width: 145,height: 145))) + + let progressView3 = ProgressView(frame: .init(origin: .zero, size: .init(width: 105,height: 105))) + + let activityStackView = ActivityStackView() private let divisionLine = UIView() - private let showDetailButton = UIButton() + let showDetailButton = UIButton() //MARK: - Life Cycle @@ -27,6 +33,9 @@ final class ActivityCardView: UIView { self.setUI() self.setHierachy() self.setLayout() + progressView1.ringColor = .blue1 + progressView2.ringColor = .blue2 + progressView3.ringColor = .blue3 } @available(*, unavailable) @@ -42,9 +51,6 @@ final class ActivityCardView: UIView { $0.layer.cornerRadius = 8 } - ringImageView.do { - $0.image = UIImage(named: "ring") - } divisionLine.do { $0.setBorder(borderWidth: 1, borderColor: .gray600) @@ -60,8 +66,9 @@ final class ActivityCardView: UIView { //MARK: - set Hierachy private func setHierachy() { - - self.addSubviews(ringImageView, + self.addSubviews(progressView1, + progressView2, + progressView3, activityStackView, divisionLine, showDetailButton) @@ -70,10 +77,26 @@ final class ActivityCardView: UIView { //MARK: - set Layout private func setLayout() { - - ringImageView.snp.makeConstraints { - $0.top.equalToSuperview().inset(34.adjusted) - $0.centerX.equalToSuperview() + self.snp.makeConstraints { + $0.width.equalTo(335.adjusted) + $0.height.equalTo(405.adjusted) + } + + progressView1.snp.makeConstraints { + $0.top.equalToSuperview().offset(34) + $0.leading.equalToSuperview().offset(74) + $0.width.height.equalTo(187) + } + progressView2.snp.makeConstraints { + $0.top.equalTo(progressView1).offset(21) + $0.leading.equalToSuperview().offset(95) + $0.width.height.equalTo(145) + } + + progressView3.snp.makeConstraints { + $0.top.equalTo(progressView2).offset(21) + $0.leading.equalToSuperview().offset(115) + $0.width.height.equalTo(105) } activityStackView.snp.makeConstraints { diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ActivityStackView.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ActivityStackView.swift index e4f3dbf..24771a8 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ActivityStackView.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ActivityStackView.swift @@ -29,18 +29,15 @@ final class ActivityStackView: UIStackView { private func setUI() { volunteerHourItem.do { $0.titleLabel.text = "봉사시간" - $0.valueLabel.text = "5시간" - $0.circleImageView.image = Image.ellipse1 + $0.valueLabel.text = "" } programCompletionNumberItem.do { $0.titleLabel.text = "프로그램 이수" - $0.valueLabel.text = "3개" - $0.circleImageView.image = Image.ellipse2 + $0.valueLabel.text = "" } licenseNumberItem.do { $0.titleLabel.text = "자격증" - $0.valueLabel.text = "2개" - $0.circleImageView.image = Image.ellipse3 + $0.valueLabel.text = "" } } @@ -54,4 +51,11 @@ final class ActivityStackView: UIStackView { self.axis = .vertical self.spacing = 17.adjusted } + + func dataBind(_ data: MainModel?) { + guard let data else { return } + volunteerHourItem.valueLabel.text = "\(data.volunteerHours)시간" + programCompletionNumberItem.valueLabel.text = "\(data.completedProgramCount)개" + licenseNumberItem.valueLabel.text = "\(data.certificateCount)개" + } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/IdCardView.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/IdCardView.swift index a4321e0..0be8e8a 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/IdCardView.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/IdCardView.swift @@ -145,4 +145,13 @@ final class IdCardView: UIView { $0.leading.equalTo(genderChipView.snp.trailing).offset(178.adjusted) } } + + func dataBind(_ data: MainModel?) { + guard let data else { return } + userName.text = data.name + ageChipView.infoLabel.text = "\(data.age)세" + genderChipView.infoLabel.text = data.gender + userCrimeHistory.text = data.criminalHistory + userCrimeYearAgo.text = data.criminalHistoryDate + } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ProgressView.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ProgressView.swift new file mode 100644 index 0000000..63113fb --- /dev/null +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Main/View/ProgressView.swift @@ -0,0 +1,68 @@ +// +// ProgressView.swift +// SOPKATHON_33-iOS +// +// Created by 류희재 on 2023/11/26. +// + +import UIKit + +class ProgressView: UIView { + var ringColor: UIColor? + private var circleLayer = CAShapeLayer() + private var progressLayer = CAShapeLayer() + private var startPoint = CGFloat(-0.5 * Double.pi) + private var endPoint = CGFloat(1.5 * Double.pi) + + + override func draw(_ rect: CGRect) { + createCircularPath() + } + + func createCircularPath() { + guard let ringColor else { return } + self.backgroundColor = .white + let circularPath = UIBezierPath(arcCenter: .init( + x: self.frame.width / 2.0, + y: self.frame.height / 2.0), + radius: (frame.size.height - 10) / 2.0 , + startAngle: startPoint, + endAngle: endPoint, + clockwise: true + ) + circleLayer.path = circularPath.cgPath + circleLayer.fillColor = UIColor.clear.cgColor + circleLayer.lineCap = .round + circleLayer.lineWidth = 15 + circleLayer.strokeStart = 0 + circleLayer.strokeEnd = 1.0 + circleLayer.strokeColor = UIColor.black.withAlphaComponent(0.4).cgColor + layer.addSublayer(circleLayer) + + progressLayer.path = circularPath.cgPath + progressLayer.fillColor = UIColor.clear.cgColor + progressLayer.lineCap = .round + progressLayer.lineWidth = 15 + progressLayer.strokeStart = 0.0 +// progressLayer.strokeEnd = 0.5 + + progressLayer.strokeColor = ringColor.cgColor + layer.addSublayer(progressLayer) + } + + func progressAnimation(duration: TimeInterval, value: Double) { + // created circularProgressAnimation with keyPath + + let circularProgressAnimation = CABasicAnimation(keyPath: "strokeEnd") + // set the end time + circularProgressAnimation.duration = duration + circularProgressAnimation.fromValue = 0 + circularProgressAnimation.toValue = value + circularProgressAnimation.fillMode = .forwards + circularProgressAnimation.isRemovedOnCompletion = false + progressLayer.add(circularProgressAnimation, forKey: "progressAnim") + } +} + + + diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/Cell/ProgramCollectionViewCell.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/Cell/ProgramCollectionViewCell.swift index ccb55c6..400ee8d 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/Cell/ProgramCollectionViewCell.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/Cell/ProgramCollectionViewCell.swift @@ -14,6 +14,7 @@ final class ProgramCollectionViewCell: UICollectionViewCell { // MARK: - UI Components + private let backgroundImageView = UIImageView() private let titleLabel = UILabel() private let areaLabel = UILabel() private let updateLabel = UILabel() @@ -36,27 +37,33 @@ final class ProgramCollectionViewCell: UICollectionViewCell { private func style() { contentView.do { - $0.backgroundColor = .yellow + $0.backgroundColor = .gray700 $0.makeCornerRound(ratio: 10) } + backgroundImageView.do { + $0.contentMode = .scaleAspectFit + $0.image = Image.dummy1 + } + titleLabel.do { $0.text = "프로그램 명을 입력해주세요." $0.font = UIFont(name: "Pretendard-SemiBold", size: 14) - $0.textColor = .black + $0.textColor = .white $0.textAlignment = .left + $0.numberOfLines = 0 } areaLabel.do { $0.text = "솝트광역시" $0.font = UIFont(name: "Pretendard-regular", size: 12) - $0.textColor = .black + $0.textColor = .gray400 $0.textAlignment = .left } updateLabel.do { $0.text = "00.00" $0.font = UIFont(name: "Pretendard-regular", size: 12) - $0.textColor = .black + $0.textColor = .gray400 $0.textAlignment = .left } @@ -64,6 +71,7 @@ final class ProgramCollectionViewCell: UICollectionViewCell { private func hieararchy() { contentView.addSubviews( + backgroundImageView, titleLabel, areaLabel, updateLabel @@ -71,8 +79,13 @@ final class ProgramCollectionViewCell: UICollectionViewCell { } private func layout() { + backgroundImageView.snp.makeConstraints { + $0.top.leading.trailing.equalToSuperview() + $0.height.equalTo(115) + } + titleLabel.snp.makeConstraints { - $0.top.equalToSuperview().offset(135.adjusted) + $0.top.equalToSuperview().offset(130.adjusted) $0.leading.trailing.equalToSuperview().inset(12.adjusted) } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/View/AssitantView/ProgramTopView.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/View/AssitantView/ProgramTopView.swift index 864303f..208fe75 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/View/AssitantView/ProgramTopView.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/View/AssitantView/ProgramTopView.swift @@ -40,19 +40,19 @@ final class ProgramTopView: UIView { voluteerButton.do { $0.setTitle("봉사", for: .normal) $0.titleLabel?.font = UIFont(name: "Pretendard-SemiBold", size: 20) - $0.setTitleColor(.black, for: .normal) + $0.setTitleColor(.white, for: .normal) } employmentButton.do { $0.setTitle("취업", for: .normal) $0.titleLabel?.font = UIFont(name: "Pretendard-SemiBold", size: 20) - $0.setTitleColor(.black, for: .normal) + $0.setTitleColor(.gray500, for: .normal) } statusSupportButton.do { $0.setTitle("지원현황", for: .normal) $0.titleLabel?.font = UIFont(name: "Pretendard-SemiBold", size: 14) - $0.setTitleColor(.black, for: .normal) + $0.setTitleColor(.gray300, for: .normal) } } diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/View/ProgramView.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/View/ProgramView.swift index 65d6d1f..04d574d 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/View/ProgramView.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/View/ProgramView.swift @@ -37,7 +37,11 @@ final class ProgramView: UIView { // MARK: - Custom Method private func style() { - self.backgroundColor = .white + self.backgroundColor = .gray800 + + programCollectionView.do { + $0.backgroundColor = .gray800 + } } private func hieararchy() { diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/ViewController/ProgramViewController.swift b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/ViewController/ProgramViewController.swift index 683d62f..edf2eb7 100644 --- a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/ViewController/ProgramViewController.swift +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Presentation/Program/ViewController/ProgramViewController.swift @@ -10,10 +10,15 @@ import UIKit import SnapKit import Then -final class ProgramViewController: UIViewController { +final class ProgramViewController: BaseViewController { //MARK: - UI Components + private var programData: [ProgramModel] = [] { + didSet { + rootView.programCollectionView.reloadData() + } + } private let rootView = ProgramView() //MARK: - Life Cycle @@ -27,6 +32,7 @@ final class ProgramViewController: UIViewController { target() delegate() + requestProgramAPI(type: "VOLUNTEERING") } private func target() { @@ -44,15 +50,22 @@ final class ProgramViewController: UIViewController { //MARK: - Action Method @objc func voluteerButtonDidTap() { - print(#function) + requestProgramAPI(type: "VOLUNTEERING") } @objc func employmentButtonDidTap() { - print(#function) + requestProgramAPI(type: "EMPLOYMENT") } @objc func statusSupportButtonDidTap() { print(#function) } + private func requestProgramAPI(type: String) { + MoyaAPI.shared.getProgramData(type: type) { [weak self] result in + guard let result = self?.validateResult(result) as? [ProgramModel] else { return } + self?.programData = result + } + } + } @@ -67,7 +80,7 @@ extension ProgramViewController: UICollectionViewDelegateFlowLayout { extension ProgramViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return 20 + return programData.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/_ic_card1.imageset/Contents.json b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/ic_card1.imageset/Contents.json similarity index 100% rename from SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/_ic_card1.imageset/Contents.json rename to SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/ic_card1.imageset/Contents.json diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/_ic_card1.imageset/_ic_card1.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/ic_card1.imageset/_ic_card1.png similarity index 100% rename from SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/_ic_card1.imageset/_ic_card1.png rename to SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/ic_card1.imageset/_ic_card1.png diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/_ic_card1.imageset/_ic_card1@2x.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/ic_card1.imageset/_ic_card1@2x.png similarity index 100% rename from SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/_ic_card1.imageset/_ic_card1@2x.png rename to SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/ic_card1.imageset/_ic_card1@2x.png diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/_ic_card1.imageset/_ic_card1@3x.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/ic_card1.imageset/_ic_card1@3x.png similarity index 100% rename from SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/_ic_card1.imageset/_ic_card1@3x.png rename to SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/ic_card1.imageset/_ic_card1@3x.png diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card.imageset/Contents.json b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card1.imageset/Contents.json similarity index 100% rename from SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card.imageset/Contents.json rename to SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card1.imageset/Contents.json diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card.imageset/img_card.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card1.imageset/img_card.png similarity index 100% rename from SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card.imageset/img_card.png rename to SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card1.imageset/img_card.png diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card.imageset/img_card@2x.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card1.imageset/img_card@2x.png similarity index 100% rename from SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card.imageset/img_card@2x.png rename to SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card1.imageset/img_card@2x.png diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card.imageset/img_card@3x.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card1.imageset/img_card@3x.png similarity index 100% rename from SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card.imageset/img_card@3x.png rename to SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card1.imageset/img_card@3x.png diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/Contents.json b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/Contents.json new file mode 100644 index 0000000..87d424c --- /dev/null +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "img_card2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "img_card2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "img_card2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2.png new file mode 100644 index 0000000..773990d Binary files /dev/null and b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2.png differ diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2@2x.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2@2x.png new file mode 100644 index 0000000..02a99d2 Binary files /dev/null and b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2@2x.png differ diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2@3x.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2@3x.png new file mode 100644 index 0000000..172e207 Binary files /dev/null and b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card2.imageset/img_card2@3x.png differ diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/Contents.json b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/Contents.json new file mode 100644 index 0000000..4ab4fce --- /dev/null +++ b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "img_card3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "img_card3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "img_card3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3.png new file mode 100644 index 0000000..e37f6c8 Binary files /dev/null and b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3.png differ diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3@2x.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3@2x.png new file mode 100644 index 0000000..3e72e8b Binary files /dev/null and b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3@2x.png differ diff --git a/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3@3x.png b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3@3x.png new file mode 100644 index 0000000..0b37825 Binary files /dev/null and b/SOPKATHON_33-iOS/SOPKATHON_33-iOS/Resource/Assets.xcassets/img_card3.imageset/img_card3@3x.png differ