From 5b998e6fb63e779288164ee227eaaaea0763ca70 Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 01:29:17 +0900 Subject: [PATCH 01/11] =?UTF-8?q?feat/#146=20=EC=95=BD=EC=86=8D=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EB=B7=B0=20segmentControl=EA=B3=BC=20page?= =?UTF-8?q?ViewController=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Promise/PromiseInfoViewController.swift | 2 +- .../Promise/PromiseViewController.swift | 41 ++++++++++++++++--- .../Source/Promise/PromiseViewModel.swift | 7 +++- .../Promise/ReadyStatusViewController.swift | 2 +- .../Source/Promise/TardyViewController.swift | 2 +- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/KkuMulKum/Source/Promise/PromiseInfoViewController.swift b/KkuMulKum/Source/Promise/PromiseInfoViewController.swift index 8dd2847c..26c81124 100644 --- a/KkuMulKum/Source/Promise/PromiseInfoViewController.swift +++ b/KkuMulKum/Source/Promise/PromiseInfoViewController.swift @@ -12,7 +12,7 @@ class PromiseInfoViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. + view.backgroundColor = .red } diff --git a/KkuMulKum/Source/Promise/PromiseViewController.swift b/KkuMulKum/Source/Promise/PromiseViewController.swift index c2b35fce..1309864c 100644 --- a/KkuMulKum/Source/Promise/PromiseViewController.swift +++ b/KkuMulKum/Source/Promise/PromiseViewController.swift @@ -25,18 +25,23 @@ class PromiseViewController: BaseViewController { view.backgroundColor = .white self.navigationItem.title = "기말고사 모각작" - view.addSubview(promiseSegmentedControl) addChild(promisePageViewController) + [ + promiseSegmentedControl, + promisePageViewController.view + ].forEach { view.addSubview($0) } + + promisePageViewController.setViewControllers([promiseViewModel.promiseViewControllerList[0]], direction: .forward, animated: false) promiseSegmentedControl.snp.makeConstraints { - $0.top.equalToSuperview() + $0.top.equalTo(view.safeAreaLayoutGuide) $0.leading.trailing.equalToSuperview().inset(-6) $0.height.equalTo(52) } promisePageViewController.view.snp.makeConstraints { $0.top.equalTo(promiseSegmentedControl.snp.bottom) - $0.horizontalEdges.bottom.equalToSuperview() + $0.leading.trailing.bottom.equalToSuperview() } promisePageViewController.didMove(toParent: self) @@ -52,19 +57,43 @@ class PromiseViewController: BaseViewController { } @objc private func didSegmentedControlIndexUpdated() { + let direction: UIPageViewController.NavigationDirection = promiseViewModel.currentPage.value <= promiseSegmentedControl.selectedSegmentIndex ? .forward : .reverse + promiseSegmentedControl.selectedUnderLineView.snp.updateConstraints { $0.leading.equalToSuperview().offset((promiseSegmentedControl.bounds.width / CGFloat(promiseSegmentedControl.numberOfSegments)) * CGFloat(promiseSegmentedControl.selectedSegmentIndex)) } + + promiseViewModel.didSegmentIndexChanged(index: promiseSegmentedControl.selectedSegmentIndex) + + promisePageViewController.setViewControllers([ + promiseViewModel.promiseViewControllerList[promiseViewModel.currentPage.value] + ], direction: direction, animated: false) } } -extension BaseViewController: UIPageViewControllerDelegate, UIPageViewControllerDataSource { - func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { +extension PromiseViewController: UIPageViewControllerDelegate, UIPageViewControllerDataSource { + func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { return UIViewController() } - func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { + func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { return UIViewController() } + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: BaseViewController) -> BaseViewController? { + guard let index = promiseViewModel.promiseViewControllerList.firstIndex(of: viewController), + index - 1 >= 0 + else { return nil } + + return promiseViewModel.promiseViewControllerList[index - 1] + } + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: BaseViewController) -> BaseViewController? { + guard let index = promiseViewModel.promiseViewControllerList.firstIndex(of: viewController), + index + 1 < promiseViewModel.promiseViewControllerList.count + else { return nil } + + return promiseViewModel.promiseViewControllerList[index + 1] + } } diff --git a/KkuMulKum/Source/Promise/PromiseViewModel.swift b/KkuMulKum/Source/Promise/PromiseViewModel.swift index 3d4950e6..b7e09038 100644 --- a/KkuMulKum/Source/Promise/PromiseViewModel.swift +++ b/KkuMulKum/Source/Promise/PromiseViewModel.swift @@ -9,7 +9,12 @@ import Foundation class PromiseViewModel { - let promiseViewControllerList = [PromiseInfoViewController(), + var currentPage = ObservablePattern(0) + let promiseViewControllerList: [BaseViewController] = [PromiseInfoViewController(), ReadyStatusViewController(), TardyViewController()] + + func didSegmentIndexChanged(index: Int) { + currentPage.value = index + } } diff --git a/KkuMulKum/Source/Promise/ReadyStatusViewController.swift b/KkuMulKum/Source/Promise/ReadyStatusViewController.swift index a576adb3..f1d8efda 100644 --- a/KkuMulKum/Source/Promise/ReadyStatusViewController.swift +++ b/KkuMulKum/Source/Promise/ReadyStatusViewController.swift @@ -12,7 +12,7 @@ class ReadyStatusViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. + view.backgroundColor = .blue } diff --git a/KkuMulKum/Source/Promise/TardyViewController.swift b/KkuMulKum/Source/Promise/TardyViewController.swift index 8e0ea951..ab16bf4e 100644 --- a/KkuMulKum/Source/Promise/TardyViewController.swift +++ b/KkuMulKum/Source/Promise/TardyViewController.swift @@ -12,7 +12,7 @@ class TardyViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. + view.backgroundColor = .green } From 932d2633fb17e139b009ed485c60e5d7f512fd0b Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 01:34:49 +0900 Subject: [PATCH 02/11] =?UTF-8?q?chore/#146=20=EC=95=84=ED=82=A4=ED=85=8D?= =?UTF-8?q?=EC=B3=90=EC=97=90=20=EB=A7=9E=EB=8F=84=EB=A1=9D=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KkuMulKum.xcodeproj/project.pbxproj | 36 +++++++++++++++---- .../{ => View}/PromiseSegmentedControl.swift | 0 .../PromiseInfoViewController.swift | 0 .../PromiseViewController.swift | 0 .../ReadyStatusViewController.swift | 0 .../TardyViewController.swift | 0 .../{ => ViewModel}/PromiseViewModel.swift | 0 7 files changed, 30 insertions(+), 6 deletions(-) rename KkuMulKum/Source/Promise/{ => View}/PromiseSegmentedControl.swift (100%) rename KkuMulKum/Source/Promise/{ => ViewController}/PromiseInfoViewController.swift (100%) rename KkuMulKum/Source/Promise/{ => ViewController}/PromiseViewController.swift (100%) rename KkuMulKum/Source/Promise/{ => ViewController}/ReadyStatusViewController.swift (100%) rename KkuMulKum/Source/Promise/{ => ViewController}/TardyViewController.swift (100%) rename KkuMulKum/Source/Promise/{ => ViewModel}/PromiseViewModel.swift (100%) diff --git a/KkuMulKum.xcodeproj/project.pbxproj b/KkuMulKum.xcodeproj/project.pbxproj index ce5f4079..cb3dcf59 100644 --- a/KkuMulKum.xcodeproj/project.pbxproj +++ b/KkuMulKum.xcodeproj/project.pbxproj @@ -314,6 +314,33 @@ path = Login; sourceTree = ""; }; + DD931B672C3D9D9C00526452 /* ViewController */ = { + isa = PBXGroup; + children = ( + DDAF1C882C3D6E3D008A37D3 /* ReadyStatusViewController.swift */, + DDAF1C8B2C3D6E3D008A37D3 /* TardyViewController.swift */, + DDAF1C8C2C3D6E3D008A37D3 /* PromiseInfoViewController.swift */, + DDAF1C8D2C3D6E3D008A37D3 /* PromiseViewController.swift */, + ); + path = ViewController; + sourceTree = ""; + }; + DD931B682C3D9DAD00526452 /* View */ = { + isa = PBXGroup; + children = ( + DDAF1C892C3D6E3D008A37D3 /* PromiseSegmentedControl.swift */, + ); + path = View; + sourceTree = ""; + }; + DD931B692C3D9DC800526452 /* ViewModel */ = { + isa = PBXGroup; + children = ( + DDAF1C8A2C3D6E3D008A37D3 /* PromiseViewModel.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; DDA2EE7B2C386078007C6059 /* Home */ = { isa = PBXGroup; children = ( @@ -357,12 +384,9 @@ DDAF1C872C3D6E3D008A37D3 /* Promise */ = { isa = PBXGroup; children = ( - DDAF1C882C3D6E3D008A37D3 /* ReadyStatusViewController.swift */, - DDAF1C892C3D6E3D008A37D3 /* PromiseSegmentedControl.swift */, - DDAF1C8A2C3D6E3D008A37D3 /* PromiseViewModel.swift */, - DDAF1C8B2C3D6E3D008A37D3 /* TardyViewController.swift */, - DDAF1C8C2C3D6E3D008A37D3 /* PromiseInfoViewController.swift */, - DDAF1C8D2C3D6E3D008A37D3 /* PromiseViewController.swift */, + DD931B672C3D9D9C00526452 /* ViewController */, + DD931B682C3D9DAD00526452 /* View */, + DD931B692C3D9DC800526452 /* ViewModel */, ); path = Promise; sourceTree = ""; diff --git a/KkuMulKum/Source/Promise/PromiseSegmentedControl.swift b/KkuMulKum/Source/Promise/View/PromiseSegmentedControl.swift similarity index 100% rename from KkuMulKum/Source/Promise/PromiseSegmentedControl.swift rename to KkuMulKum/Source/Promise/View/PromiseSegmentedControl.swift diff --git a/KkuMulKum/Source/Promise/PromiseInfoViewController.swift b/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift similarity index 100% rename from KkuMulKum/Source/Promise/PromiseInfoViewController.swift rename to KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift diff --git a/KkuMulKum/Source/Promise/PromiseViewController.swift b/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift similarity index 100% rename from KkuMulKum/Source/Promise/PromiseViewController.swift rename to KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift diff --git a/KkuMulKum/Source/Promise/ReadyStatusViewController.swift b/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift similarity index 100% rename from KkuMulKum/Source/Promise/ReadyStatusViewController.swift rename to KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift diff --git a/KkuMulKum/Source/Promise/TardyViewController.swift b/KkuMulKum/Source/Promise/ViewController/TardyViewController.swift similarity index 100% rename from KkuMulKum/Source/Promise/TardyViewController.swift rename to KkuMulKum/Source/Promise/ViewController/TardyViewController.swift diff --git a/KkuMulKum/Source/Promise/PromiseViewModel.swift b/KkuMulKum/Source/Promise/ViewModel/PromiseViewModel.swift similarity index 100% rename from KkuMulKum/Source/Promise/PromiseViewModel.swift rename to KkuMulKum/Source/Promise/ViewModel/PromiseViewModel.swift From bc4fdf271c05d1e07e13f1bf2cb48b272296740d Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 03:18:18 +0900 Subject: [PATCH 03/11] =?UTF-8?q?feat/#146=20=EA=B3=B5=EB=8F=99=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=9E=84=EC=8B=9C=20Collectio?= =?UTF-8?q?nView=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KkuMulKum.xcodeproj/project.pbxproj | 28 ++++++++++- .../Cell/ParticipantCollectionViewCell.swift | 38 ++++++++++++++ .../View/EnterReadyInfoButtonView.swift | 49 +++++++++++++++++++ .../Promise/View/ReadyPlanInfoView.swift | 16 ++++++ .../Source/Promise/View/ReadyStatusView.swift | 20 ++++++++ .../PromiseInfoViewController.swift | 42 ++++++++++++---- .../PromiseViewController.swift | 6 +-- .../ReadyStatusViewController.swift | 4 +- 8 files changed, 186 insertions(+), 17 deletions(-) create mode 100644 KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift create mode 100644 KkuMulKum/Source/Promise/View/EnterReadyInfoButtonView.swift create mode 100644 KkuMulKum/Source/Promise/View/ReadyPlanInfoView.swift create mode 100644 KkuMulKum/Source/Promise/View/ReadyStatusView.swift diff --git a/KkuMulKum.xcodeproj/project.pbxproj b/KkuMulKum.xcodeproj/project.pbxproj index cb3dcf59..6ffa4eaf 100644 --- a/KkuMulKum.xcodeproj/project.pbxproj +++ b/KkuMulKum.xcodeproj/project.pbxproj @@ -67,6 +67,10 @@ DD3072242C3C0EB200416D9F /* MyPromiseReadyInfoRequestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3072232C3C0EB200416D9F /* MyPromiseReadyInfoRequestModel.swift */; }; DD3072262C3C0F0B00416D9F /* PromiseLateInfoResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3072252C3C0F0B00416D9F /* PromiseLateInfoResponseModel.swift */; }; DD3072282C3C104D00416D9F /* ArrivalCompletionResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3072272C3C104D00416D9F /* ArrivalCompletionResponseModel.swift */; }; + DD931B6B2C3D9EBB00526452 /* ReadyStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B6A2C3D9EBB00526452 /* ReadyStatusView.swift */; }; + DD931B6E2C3DA27F00526452 /* ParticipantCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B6D2C3DA27F00526452 /* ParticipantCollectionViewCell.swift */; }; + DD931B722C3DA92700526452 /* EnterReadyInfoButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B712C3DA92700526452 /* EnterReadyInfoButtonView.swift */; }; + DD931B742C3DAB9A00526452 /* ReadyPlanInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B732C3DAB9A00526452 /* ReadyPlanInfoView.swift */; }; DDA2EE732C385EB9007C6059 /* MainTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE722C385EB9007C6059 /* MainTabBarController.swift */; }; DDA2EE752C385FB1007C6059 /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE742C385FB1007C6059 /* HomeViewController.swift */; }; DDA2EE772C385FC3007C6059 /* GroupListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE762C385FC3007C6059 /* GroupListViewController.swift */; }; @@ -147,6 +151,10 @@ DD3072232C3C0EB200416D9F /* MyPromiseReadyInfoRequestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPromiseReadyInfoRequestModel.swift; sourceTree = ""; }; DD3072252C3C0F0B00416D9F /* PromiseLateInfoResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromiseLateInfoResponseModel.swift; sourceTree = ""; }; DD3072272C3C104D00416D9F /* ArrivalCompletionResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrivalCompletionResponseModel.swift; sourceTree = ""; }; + DD931B6A2C3D9EBB00526452 /* ReadyStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadyStatusView.swift; sourceTree = ""; }; + DD931B6D2C3DA27F00526452 /* ParticipantCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParticipantCollectionViewCell.swift; sourceTree = ""; }; + DD931B712C3DA92700526452 /* EnterReadyInfoButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnterReadyInfoButtonView.swift; sourceTree = ""; }; + DD931B732C3DAB9A00526452 /* ReadyPlanInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadyPlanInfoView.swift; sourceTree = ""; }; DDA2EE722C385EB9007C6059 /* MainTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarController.swift; sourceTree = ""; }; DDA2EE742C385FB1007C6059 /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; DDA2EE762C385FC3007C6059 /* GroupListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupListViewController.swift; sourceTree = ""; }; @@ -317,10 +325,10 @@ DD931B672C3D9D9C00526452 /* ViewController */ = { isa = PBXGroup; children = ( + DDAF1C8D2C3D6E3D008A37D3 /* PromiseViewController.swift */, + DDAF1C8C2C3D6E3D008A37D3 /* PromiseInfoViewController.swift */, DDAF1C882C3D6E3D008A37D3 /* ReadyStatusViewController.swift */, DDAF1C8B2C3D6E3D008A37D3 /* TardyViewController.swift */, - DDAF1C8C2C3D6E3D008A37D3 /* PromiseInfoViewController.swift */, - DDAF1C8D2C3D6E3D008A37D3 /* PromiseViewController.swift */, ); path = ViewController; sourceTree = ""; @@ -329,6 +337,9 @@ isa = PBXGroup; children = ( DDAF1C892C3D6E3D008A37D3 /* PromiseSegmentedControl.swift */, + DD931B6A2C3D9EBB00526452 /* ReadyStatusView.swift */, + DD931B712C3DA92700526452 /* EnterReadyInfoButtonView.swift */, + DD931B732C3DAB9A00526452 /* ReadyPlanInfoView.swift */, ); path = View; sourceTree = ""; @@ -341,6 +352,14 @@ path = ViewModel; sourceTree = ""; }; + DD931B6C2C3DA24C00526452 /* Cell */ = { + isa = PBXGroup; + children = ( + DD931B6D2C3DA27F00526452 /* ParticipantCollectionViewCell.swift */, + ); + path = Cell; + sourceTree = ""; + }; DDA2EE7B2C386078007C6059 /* Home */ = { isa = PBXGroup; children = ( @@ -387,6 +406,7 @@ DD931B672C3D9D9C00526452 /* ViewController */, DD931B682C3D9DAD00526452 /* View */, DD931B692C3D9DC800526452 /* ViewModel */, + DD931B6C2C3DA24C00526452 /* Cell */, ); path = Promise; sourceTree = ""; @@ -750,12 +770,14 @@ DED5DBEC2C345210006ECE7E /* BaseViewController.swift in Sources */, DD30721A2C3C011600416D9F /* AddPromiseRequestModel.swift in Sources */, DD30721E2C3C0CC800416D9F /* PromiseInfoResponseModel.swift in Sources */, + DD931B722C3DA92700526452 /* EnterReadyInfoButtonView.swift in Sources */, A3FB18512C3BF531001483E5 /* RegisterMeetingsResponseModel.swift in Sources */, 789AD4B32C3C0093002E2688 /* SocialLoginResponseModel.swift in Sources */, DE9E188B2C3BC92500DB76B4 /* EmptyModel.swift in Sources */, DDA2EE732C385EB9007C6059 /* MainTabBarController.swift in Sources */, A3FB184D2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift in Sources */, DEBA03312C3C2972002ED8F2 /* ViewController.swift in Sources */, + DD931B742C3DAB9A00526452 /* ReadyPlanInfoView.swift in Sources */, 789873342C3D1A7B00435E96 /* LoginView.swift in Sources */, A3FB18592C3BF77D001483E5 /* MeetingInfoResponseModel.swift in Sources */, DE9E18842C3BA84500DB76B4 /* CustomTextField.swift in Sources */, @@ -793,8 +815,10 @@ DDAF1C8F2C3D6E3D008A37D3 /* PromiseSegmentedControl.swift in Sources */, DE32D1D22C3BF703006848DF /* LoginUserResponseModel.swift in Sources */, DE9E18892C3BC91000DB76B4 /* ResponseBodyDTO.swift in Sources */, + DD931B6B2C3D9EBB00526452 /* ReadyStatusView.swift in Sources */, DD3072202C3C0D4500416D9F /* MyReadyStatusResponseModel.swift in Sources */, DD3072282C3C104D00416D9F /* ArrivalCompletionResponseModel.swift in Sources */, + DD931B6E2C3DA27F00526452 /* ParticipantCollectionViewCell.swift in Sources */, DD3072242C3C0EB200416D9F /* MyPromiseReadyInfoRequestModel.swift in Sources */, 789873332C3D1A7B00435E96 /* LoginViewModel.swift in Sources */, DED5DBEE2C34529A006ECE7E /* BaseView.swift in Sources */, diff --git a/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift b/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift new file mode 100644 index 00000000..5b379f3b --- /dev/null +++ b/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift @@ -0,0 +1,38 @@ +// +// ParticipantCollectionViewCell.swift +// KkuMulKum +// +// Created by YOUJIM on 7/10/24. +// + +import UIKit + +import SnapKit + +class ParticipantCollectionViewCell: BaseCollectionViewCell { + + private lazy var profileButton: UIButton = UIButton().then { + $0.setImage(.imgProfile, for: .normal) + } + + private let userNameLabel: UILabel = UILabel().then { + $0.setText("dddd", style: .caption02) + } + + override func setupView() { + contentView.addSubviews(profileButton, userNameLabel) + } + + override func setupAutoLayout() { + profileButton.snp.makeConstraints { + $0.top.leading.trailing.equalToSuperview() + $0.width.height.equalTo(64) + } + + userNameLabel.snp.makeConstraints { + $0.top.equalTo(profileButton.snp.bottom).offset(4) + $0.centerX.equalTo(profileButton) + $0.bottom.equalToSuperview() + } + } +} diff --git a/KkuMulKum/Source/Promise/View/EnterReadyInfoButtonView.swift b/KkuMulKum/Source/Promise/View/EnterReadyInfoButtonView.swift new file mode 100644 index 00000000..46c21e86 --- /dev/null +++ b/KkuMulKum/Source/Promise/View/EnterReadyInfoButtonView.swift @@ -0,0 +1,49 @@ +// +// EnterReadyInfoButtonView.swift +// KkuMulKum +// +// Created by YOUJIM on 7/10/24. +// + +import UIKit + +class EnterReadyInfoButtonView: BaseView { + private let descriptionLabel: UILabel = UILabel().then { + $0.setText("준비 정보 입력하기", style: .body03) + } + + private let chevronButton: UIButton = UIButton().then { + $0.setImage(.iconRight, for: .normal) + $0.contentMode = .scaleAspectFill + } + + override func setupView() { + backgroundColor = .white + addSubviews(descriptionLabel, chevronButton) + } + + override func setupAutoLayout() { + descriptionLabel.snp.makeConstraints { + $0.centerY.equalToSuperview() + $0.leading.equalToSuperview().offset(20) + } + + chevronButton.snp.makeConstraints { + $0.trailing.equalToSuperview().inset(17) + $0.centerY.equalToSuperview() + } + } + + + // TODO: 빼야됨 + + private func setupAction() { + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTapped)) + + self.addGestureRecognizer(tapGesture) + } + + @objc private func didTapped() { + + } +} diff --git a/KkuMulKum/Source/Promise/View/ReadyPlanInfoView.swift b/KkuMulKum/Source/Promise/View/ReadyPlanInfoView.swift new file mode 100644 index 00000000..b2ef156f --- /dev/null +++ b/KkuMulKum/Source/Promise/View/ReadyPlanInfoView.swift @@ -0,0 +1,16 @@ +// +// ReadyPlanInfoView.swift +// KkuMulKum +// +// Created by YOUJIM on 7/10/24. +// + +import UIKit + +class ReadyPlanInfoView: BaseView { + private let readyTimeLabel: UILabel = UILabel().then { + $0.setText("12시 30분에 준비하고,\n1시에 이동을 시작해야 해요", style: .body03) + $0.setHighlightText("12시 30분", style: .body03, color: .maincolor) + } + +} diff --git a/KkuMulKum/Source/Promise/View/ReadyStatusView.swift b/KkuMulKum/Source/Promise/View/ReadyStatusView.swift new file mode 100644 index 00000000..0368114a --- /dev/null +++ b/KkuMulKum/Source/Promise/View/ReadyStatusView.swift @@ -0,0 +1,20 @@ +// +// ReadyStatusView.swift +// KkuMulKum +// +// Created by YOUJIM on 7/10/24. +// + +import UIKit + +class ReadyStatusView: BaseView { + + + override init(frame: CGRect) { + super.init(frame: frame) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift b/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift index 26c81124..fd750b36 100644 --- a/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift @@ -8,22 +8,44 @@ import UIKit class PromiseInfoViewController: BaseViewController { + + private let collectionView: UICollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { + $0.scrollDirection = .horizontal + $0.minimumInteritemSpacing = 12 + $0.estimatedItemSize = UICollectionViewFlowLayout.automaticSize + }).then { + $0.register(ParticipantCollectionViewCell.self, forCellWithReuseIdentifier: ParticipantCollectionViewCell.reuseIdentifier) + } override func viewDidLoad() { super.viewDidLoad() - - view.backgroundColor = .red } + override func setupView() { + view.addSubview(collectionView) + + collectionView.snp.makeConstraints { + $0.top.trailing.equalToSuperview() + $0.leading.equalToSuperview().offset(20) + $0.height.equalTo(88) + } + } + + override func setupDelegate() { + collectionView.delegate = self + collectionView.dataSource = self + } +} - /* - // MARK: - Navigation - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. +extension PromiseInfoViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return 10 + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ParticipantCollectionViewCell.reuseIdentifier, for: indexPath) as? ParticipantCollectionViewCell else { return UICollectionViewCell() } + + return cell } - */ - } diff --git a/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift b/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift index 1309864c..5c186006 100644 --- a/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift @@ -10,9 +10,7 @@ import UIKit class PromiseViewController: BaseViewController { private let promiseViewModel = PromiseViewModel() - private lazy var promiseSegmentedControl = PromiseSegmentedControl(items: ["약속 정보", - "준비 현황", - "지각 꾸물이"]) + private lazy var promiseSegmentedControl = PromiseSegmentedControl(items: ["약속 정보", "준비 현황", "지각 꾸물이"]) private let promisePageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal) @@ -31,7 +29,7 @@ class PromiseViewController: BaseViewController { promisePageViewController.view ].forEach { view.addSubview($0) } - promisePageViewController.setViewControllers([promiseViewModel.promiseViewControllerList[0]], direction: .forward, animated: false) + promisePageViewController.setViewControllers([promiseViewModel.promiseViewControllerList[0]], direction: .forward, animated: true) promiseSegmentedControl.snp.makeConstraints { $0.top.equalTo(view.safeAreaLayoutGuide) diff --git a/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift b/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift index f1d8efda..13508e29 100644 --- a/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift @@ -8,11 +8,13 @@ import UIKit class ReadyStatusViewController: BaseViewController { + + private let readyStatusView: ReadyStatusView = ReadyStatusView() override func viewDidLoad() { super.viewDidLoad() - view.backgroundColor = .blue + view.addSubview(readyStatusView) } From 6b5b9b5d36a662c6ccd6e33ff1d1da559730e65d Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 03:55:31 +0900 Subject: [PATCH 04/11] =?UTF-8?q?add/#146=20gray0=20=EC=83=89=EC=83=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gray0.colorset/Contents.json | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 KkuMulKum/Resource/Color.xcassets/gray0.colorset/Contents.json diff --git a/KkuMulKum/Resource/Color.xcassets/gray0.colorset/Contents.json b/KkuMulKum/Resource/Color.xcassets/gray0.colorset/Contents.json new file mode 100644 index 00000000..e1ce072f --- /dev/null +++ b/KkuMulKum/Resource/Color.xcassets/gray0.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0xF7", + "red" : "0xF7" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0xF7", + "red" : "0xF7" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} From dc9152e8082811ea6b8fd06e0fb2bac42a441fb1 Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 04:45:21 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feat/#146=20=EC=95=BD=EC=86=8D=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=ED=99=94=EB=A9=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KkuMulKum.xcodeproj/project.pbxproj | 4 + .../Cell/ParticipantCollectionViewCell.swift | 1 + .../Source/Promise/View/PromiseInfoView.swift | 202 ++++++++++++++++++ .../Promise/View/ReadyPlanInfoView.swift | 3 +- .../PromiseInfoViewController.swift | 21 +- 5 files changed, 214 insertions(+), 17 deletions(-) create mode 100644 KkuMulKum/Source/Promise/View/PromiseInfoView.swift diff --git a/KkuMulKum.xcodeproj/project.pbxproj b/KkuMulKum.xcodeproj/project.pbxproj index 6ffa4eaf..31b47e41 100644 --- a/KkuMulKum.xcodeproj/project.pbxproj +++ b/KkuMulKum.xcodeproj/project.pbxproj @@ -71,6 +71,7 @@ DD931B6E2C3DA27F00526452 /* ParticipantCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B6D2C3DA27F00526452 /* ParticipantCollectionViewCell.swift */; }; DD931B722C3DA92700526452 /* EnterReadyInfoButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B712C3DA92700526452 /* EnterReadyInfoButtonView.swift */; }; DD931B742C3DAB9A00526452 /* ReadyPlanInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B732C3DAB9A00526452 /* ReadyPlanInfoView.swift */; }; + DD931B762C3DC16100526452 /* PromiseInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B752C3DC16100526452 /* PromiseInfoView.swift */; }; DDA2EE732C385EB9007C6059 /* MainTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE722C385EB9007C6059 /* MainTabBarController.swift */; }; DDA2EE752C385FB1007C6059 /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE742C385FB1007C6059 /* HomeViewController.swift */; }; DDA2EE772C385FC3007C6059 /* GroupListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE762C385FC3007C6059 /* GroupListViewController.swift */; }; @@ -155,6 +156,7 @@ DD931B6D2C3DA27F00526452 /* ParticipantCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParticipantCollectionViewCell.swift; sourceTree = ""; }; DD931B712C3DA92700526452 /* EnterReadyInfoButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnterReadyInfoButtonView.swift; sourceTree = ""; }; DD931B732C3DAB9A00526452 /* ReadyPlanInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadyPlanInfoView.swift; sourceTree = ""; }; + DD931B752C3DC16100526452 /* PromiseInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromiseInfoView.swift; sourceTree = ""; }; DDA2EE722C385EB9007C6059 /* MainTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarController.swift; sourceTree = ""; }; DDA2EE742C385FB1007C6059 /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; DDA2EE762C385FC3007C6059 /* GroupListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupListViewController.swift; sourceTree = ""; }; @@ -337,6 +339,7 @@ isa = PBXGroup; children = ( DDAF1C892C3D6E3D008A37D3 /* PromiseSegmentedControl.swift */, + DD931B752C3DC16100526452 /* PromiseInfoView.swift */, DD931B6A2C3D9EBB00526452 /* ReadyStatusView.swift */, DD931B712C3DA92700526452 /* EnterReadyInfoButtonView.swift */, DD931B732C3DAB9A00526452 /* ReadyPlanInfoView.swift */, @@ -819,6 +822,7 @@ DD3072202C3C0D4500416D9F /* MyReadyStatusResponseModel.swift in Sources */, DD3072282C3C104D00416D9F /* ArrivalCompletionResponseModel.swift in Sources */, DD931B6E2C3DA27F00526452 /* ParticipantCollectionViewCell.swift in Sources */, + DD931B762C3DC16100526452 /* PromiseInfoView.swift in Sources */, DD3072242C3C0EB200416D9F /* MyPromiseReadyInfoRequestModel.swift in Sources */, 789873332C3D1A7B00435E96 /* LoginViewModel.swift in Sources */, DED5DBEE2C34529A006ECE7E /* BaseView.swift in Sources */, diff --git a/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift b/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift index 5b379f3b..7a9ef284 100644 --- a/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift +++ b/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift @@ -13,6 +13,7 @@ class ParticipantCollectionViewCell: BaseCollectionViewCell { private lazy var profileButton: UIButton = UIButton().then { $0.setImage(.imgProfile, for: .normal) + $0.imageView?.contentMode = .scaleAspectFill } private let userNameLabel: UILabel = UILabel().then { diff --git a/KkuMulKum/Source/Promise/View/PromiseInfoView.swift b/KkuMulKum/Source/Promise/View/PromiseInfoView.swift new file mode 100644 index 00000000..87866a81 --- /dev/null +++ b/KkuMulKum/Source/Promise/View/PromiseInfoView.swift @@ -0,0 +1,202 @@ +// +// PromiseInfoView.swift +// KkuMulKum +// +// Created by YOUJIM on 7/10/24. +// + +import UIKit + +class PromiseInfoView: BaseView { + private let participantNumberLabel: UILabel = UILabel().then { + $0.setText("약속 참여 인원 n명", style: .body01) + $0.setHighlightText("n명", style: .body01) + } + + private let chevronButton: UIButton = UIButton().then { + $0.setImage(.iconRight, for: .normal) + $0.contentMode = .scaleAspectFill + } + + let participantCollectionView: UICollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { + $0.scrollDirection = .horizontal + $0.minimumInteritemSpacing = 12 + $0.estimatedItemSize = UICollectionViewFlowLayout.automaticSize + }).then { + $0.register(ParticipantCollectionViewCell.self, forCellWithReuseIdentifier: ParticipantCollectionViewCell.reuseIdentifier) + } + + private let backgroundView: UIView = UIView().then { + $0.backgroundColor = .gray0 + $0.layer.cornerRadius = 18 + } + + private let promiseInfoLabel: UILabel = UILabel().then { + $0.setText("약속 상세 정보", style: .body01) + } + + private let promiseInfoBackgroundView: UIView = UIView().then { + $0.backgroundColor = .white + $0.layer.borderColor = UIColor.gray2.cgColor + $0.layer.borderWidth = 1 + $0.layer.cornerRadius = 8 + } + + private let locationInfoLabel: UILabel = UILabel().then { + $0.setText("위치", style: .caption01, color: .maincolor) + } + + private let locationContentLabel: UILabel = UILabel().then { + $0.setText("sss역 s번 출구", style: .body04) + } + + private let locationDivideView: UIView = UIView().then { + $0.backgroundColor = .gray2 + } + + private let timeInfoLabel: UILabel = UILabel().then { + $0.setText("약속시간", style: .caption01, color: .maincolor) + } + + private let timeContentLabel: UILabel = UILabel().then { + $0.setText("mm월 dd일 hh:mm", style: .body04) + } + + private let timeDivideView: UIView = UIView().then { + $0.backgroundColor = .gray2 + } + + private let readyLevelInfoLabel: UILabel = UILabel().then { + $0.setText("준비레벨", style: .caption01, color: .maincolor) + } + + private let readyLevelContentLabel: UILabel = UILabel().then { + $0.setText("LV n. sss", style: .body04) + } + + private let readyLevelDivideView: UIView = UIView().then { + $0.backgroundColor = .gray2 + } + + private let penaltyLevelInfoLabel: UILabel = UILabel().then { + $0.setText("벌칙", style: .caption01, color: .maincolor) + } + + private let penaltyLevelContentLabel: UILabel = UILabel().then { + $0.setText("ssss하기", style: .body04) + } + + override func setupView() { + addSubviews(participantNumberLabel, + chevronButton, + participantCollectionView, + backgroundView, + promiseInfoLabel, + promiseInfoBackgroundView, + locationInfoLabel, + locationContentLabel, + locationDivideView, + timeInfoLabel, + timeContentLabel, + timeDivideView, + readyLevelInfoLabel, + readyLevelContentLabel, + readyLevelDivideView, + penaltyLevelInfoLabel, + penaltyLevelContentLabel) + } + + override func setupAutoLayout() { + participantNumberLabel.snp.makeConstraints { + $0.top.equalToSuperview().offset(24) + $0.leading.equalToSuperview().offset(20) + } + + chevronButton.snp.makeConstraints { + $0.centerY.equalTo(participantNumberLabel) + $0.trailing.equalToSuperview().inset(20) + $0.width.height.equalTo(24) + } + + participantCollectionView.snp.makeConstraints { + $0.top.equalTo(participantNumberLabel.snp.bottom).offset(17) + $0.leading.equalTo(participantNumberLabel) + $0.trailing.equalToSuperview() + $0.height.equalTo(88) + } + + backgroundView.snp.makeConstraints { + $0.top.equalTo(participantCollectionView.snp.bottom).offset(23) + $0.leading.trailing.equalToSuperview() + $0.bottom.equalToSuperview() + } + + promiseInfoLabel.snp.makeConstraints { + $0.top.equalTo(backgroundView.snp.top).offset(20) + $0.leading.equalToSuperview().offset(20) + } + + promiseInfoBackgroundView.snp.makeConstraints { + $0.top.equalTo(promiseInfoLabel.snp.bottom).offset(16) + $0.leading.trailing.equalToSuperview().inset(20) + $0.height.equalTo(278) + } + + locationInfoLabel.snp.makeConstraints { + $0.top.leading.equalTo(promiseInfoBackgroundView).offset(12) + } + + locationContentLabel.snp.makeConstraints { + $0.top.equalTo(locationInfoLabel.snp.bottom).offset(4) + $0.leading.equalTo(locationInfoLabel) + } + + locationDivideView.snp.makeConstraints { + $0.top.equalTo(locationContentLabel.snp.bottom).offset(13) + $0.leading.trailing.equalTo(promiseInfoBackgroundView).inset(12) + $0.height.equalTo(1) + } + + timeInfoLabel.snp.makeConstraints { + $0.top.equalTo(locationDivideView.snp.top).offset(12) + $0.leading.equalTo(locationDivideView) + } + + timeContentLabel.snp.makeConstraints { + $0.top.equalTo(timeInfoLabel.snp.bottom).offset(4) + $0.leading.equalTo(timeInfoLabel) + } + + timeDivideView.snp.makeConstraints { + $0.top.equalTo(timeContentLabel.snp.bottom).offset(13) + $0.leading.trailing.equalTo(promiseInfoBackgroundView).inset(12) + $0.height.equalTo(1) + } + + readyLevelInfoLabel.snp.makeConstraints { + $0.top.equalTo(timeDivideView.snp.top).offset(12) + $0.leading.equalTo(timeDivideView) + } + + readyLevelContentLabel.snp.makeConstraints { + $0.top.equalTo(readyLevelInfoLabel.snp.bottom).offset(4) + $0.leading.equalTo(readyLevelInfoLabel) + } + + readyLevelDivideView.snp.makeConstraints { + $0.top.equalTo(readyLevelContentLabel.snp.bottom).offset(13) + $0.leading.trailing.equalTo(promiseInfoBackgroundView).inset(12) + $0.height.equalTo(1) + } + + penaltyLevelInfoLabel.snp.makeConstraints { + $0.top.equalTo(readyLevelDivideView.snp.top).offset(12) + $0.leading.equalTo(timeDivideView) + } + + penaltyLevelContentLabel.snp.makeConstraints { + $0.top.equalTo(penaltyLevelInfoLabel.snp.bottom).offset(4) + $0.leading.equalTo(penaltyLevelInfoLabel) + } + } +} diff --git a/KkuMulKum/Source/Promise/View/ReadyPlanInfoView.swift b/KkuMulKum/Source/Promise/View/ReadyPlanInfoView.swift index b2ef156f..355010eb 100644 --- a/KkuMulKum/Source/Promise/View/ReadyPlanInfoView.swift +++ b/KkuMulKum/Source/Promise/View/ReadyPlanInfoView.swift @@ -10,7 +10,6 @@ import UIKit class ReadyPlanInfoView: BaseView { private let readyTimeLabel: UILabel = UILabel().then { $0.setText("12시 30분에 준비하고,\n1시에 이동을 시작해야 해요", style: .body03) - $0.setHighlightText("12시 30분", style: .body03, color: .maincolor) + $0.setHighlightText("12시 30분", "1시", style: .body03, color: .maincolor) } - } diff --git a/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift b/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift index fd750b36..1ce77aac 100644 --- a/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift @@ -8,32 +8,23 @@ import UIKit class PromiseInfoViewController: BaseViewController { - - private let collectionView: UICollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { - $0.scrollDirection = .horizontal - $0.minimumInteritemSpacing = 12 - $0.estimatedItemSize = UICollectionViewFlowLayout.automaticSize - }).then { - $0.register(ParticipantCollectionViewCell.self, forCellWithReuseIdentifier: ParticipantCollectionViewCell.reuseIdentifier) - } + private let promiseInfoView: PromiseInfoView = PromiseInfoView() override func viewDidLoad() { super.viewDidLoad() } override func setupView() { - view.addSubview(collectionView) + view.addSubview(promiseInfoView) - collectionView.snp.makeConstraints { - $0.top.trailing.equalToSuperview() - $0.leading.equalToSuperview().offset(20) - $0.height.equalTo(88) + promiseInfoView.snp.makeConstraints { + $0.edges.equalToSuperview() } } override func setupDelegate() { - collectionView.delegate = self - collectionView.dataSource = self + promiseInfoView.participantCollectionView.delegate = self + promiseInfoView.participantCollectionView.dataSource = self } } From 712b23fef322a388942a83efa236629fa7b057cf Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 22:26:14 +0900 Subject: [PATCH 06/11] =?UTF-8?q?feat/#146=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=EC=97=90=20=EB=A7=9E=EA=B2=8C=20UI=20=EC=84=B8=EB=B6=80=20?= =?UTF-8?q?=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Image/img_profile.imageset/Contents.json | 6 +- .../img_profile.imageset/ic_profilebasic.png | Bin 0 -> 1244 bytes .../ic_profilebasic@2x.png | Bin 0 -> 2664 bytes .../ic_profilebasic@3x.png | Bin 0 -> 4272 bytes .../img_profile.imageset/profileBasic.png | Bin 1258 -> 0 bytes .../img_profile.imageset/profileBasic@2x.png | Bin 2711 -> 0 bytes .../img_profile.imageset/profileBasic@3x.png | Bin 4348 -> 0 bytes .../Source/Core/MainTabBarController.swift | 21 ++++ .../Cell/ParticipantCollectionViewCell.swift | 23 +++-- .../Source/Promise/View/PromiseInfoView.swift | 95 +++++++++--------- .../PromiseInfoViewController.swift | 1 + .../PromiseViewController.swift | 26 +---- 12 files changed, 90 insertions(+), 82 deletions(-) create mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/ic_profilebasic.png create mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/ic_profilebasic@2x.png create mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/ic_profilebasic@3x.png delete mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/profileBasic.png delete mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/profileBasic@2x.png delete mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/profileBasic@3x.png diff --git a/KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/Contents.json b/KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/Contents.json index 62fea975..165fd2cc 100644 --- a/KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/Contents.json +++ b/KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "profileBasic.png", + "filename" : "ic_profilebasic.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "profileBasic@2x.png", + "filename" : "ic_profilebasic@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "profileBasic@3x.png", + "filename" : "ic_profilebasic@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/ic_profilebasic.png b/KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/ic_profilebasic.png new file mode 100644 index 0000000000000000000000000000000000000000..085ccad573a0e89a4b075d11bf5a9dab02df0eb8 GIT binary patch literal 1244 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 Ro7eyV002ovPDHLkV1h?i1(5&% diff --git a/KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/profileBasic@3x.png b/KkuMulKum/Resource/Assets.xcassets/Image/img_profile.imageset/profileBasic@3x.png deleted file mode 100644 index 475b2c2156d856a0217fbde70d0ed36b500bc4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4348 zcmVhkmX_xtw_g^K14c--~0&6<2gAw-T2K3aWSqG1Pa^J z-QDd?OG{gYJNGLngfC+EQltz?3_VCqNJk)!f8w0>6&4n@hzoI*ARvM~WOy|M@jaOC z%OHdjao#ns+Udf%y^H1RIM-M5^YhP$OK`j(Iy*aa=FFKxOYjq9@*3>Q6n8Ozv=74g zJ*u?*#l^*a;$R#r2nfLoYw&%n{uHTF-0$ygN4YXJK-DLi{*To1wiz@SZqZTwzjOS ztWg|5!UfUR)>e{{k?~_>&b`=7R*Mi8T>B|hkDG^whj)~el(b0#@koMbXlTgj>FKG4 z7~VpLJSMYL3}l%*f+8tv5N=ba2^(mvAl2~hP7C1 zLGp?w9!?5LJ z8dbz?lE9{Ik}`@!zv9>MD|$sS$_3$f9$$jbaJ6VG1Nr+V^7&@fJ*i6XURZ`wcK2#A zSP$}uEHcCY)heow zxT_2fV8IE!ELsc+17i3V7JsHQFL4r=ApFgrNBt+HNi5$+=h)_Wo1}478K^2A#o`x8 zmbHsDrWk{@ei)r%Pe_c!EQsFT-nD28?}T+o7mbtPn9W;bjcCRs2=+~2@i);CNJoO3 z^aL!$wGf5rz7Nwr1P8xj@jKCCa4ZnR1xU{}G&JOy{8#gWNKH+>4~uVz#?in^d>OvP zBOHTb=Ko9y0#(H|@Eh(C-G%K2QXq=kIUvc@KSg^WdM+1135Dht7pz%W0IM(VC?cf#on?k*@Ocq!6>5ewMg zgZZ#%F}Rs*SoaNl1}4&h5epeTnCq}uCK|W%1wIfJ>7cMx23i%Ib>$uHJ0u4v%huuH z;jfjJmNtYsCai^k5Y}rkBoCZXCp|s=js0>R|b0;EU1N;GiS~%qQ#KR zEb!0HGlLlx0@fiL)x{y0mZhReTHs4GAT6K%Y)3E)aV5lXk!X?{lyM~lapm;=GXw$O z;daqc$=QGhHNkDucTTA?{7+rA`ltML1vp%wpjDFP;^R}JyNYcmAz03XPM zyk9xF!9Tsdz4=%ymjq&11uka`#x>LDNTe0y>m~Tk5w80L0rSN`RHY;UW(3XX;NW0V zR1IdKh2XU(^7`?+OEWSu7IEFEA}&VC6`L_kXQJ+8Uxog)hIe74()MTP^u!V@-2FS+hpw&;RU|;>(sTlf{c?M(vj` zUoOSP#gp6l`T26i6<3Ipuqtmk@;arvySqmeKlV?v*4wN6bx?70=+GhAyLYeT=H~jG z#nRH?A(*2_kIJ4sdwhP-+O=y#I-iMzj|pn>WKDRzPzaGNv6XN(EtO_clFl4kqECl2GTu*n?qaqb=Y-(QwHE$jAsi z)uS;4&aP%Q{Rq{9z`6I(Tj~(S*wwnA81nM+!rtw45}9#qEyUUkW)%}o494%!`9u{g zc3_3@kdL48c8O}rTQk^om+-EQ<_RcT1s)pnW14|zFha|AV1X5$z_qrr`&)UHVHeRp z$6z>?u|OelJV!LpM{#pkKk}(HjdKmTX_AXTnE7<#!VOtB9ev*ca>Y|lUIkwVHfw7>hzAKGkY|&Z@J5Zg+xW<#vLMJ_@eth{y zq7b)Q95I$a~ZEU1FVar6IS z`c6-fAFdPsMA#~z7@{45rU?!6P;t2WV=U^X@1OAt{&z6dh(f4r-QtKHT3OXqFU0jC zIyU=e><@M@+NHbMKQ0R4AQs)}Wgg}k^G@-1c8`pV>@dG9h~@O6Tx&yp7*Y^a5R~++C`LC! zqsIzooUc;~j7&}^tSy3>e-4XgQ3$IJ-3*P474PSQ7*3%IsttEc*k44@q7h&6oG3CL3W0)hs?CcW4wJ%JCx?&^P(|6m&(U2o<&R1)SxF* zf+#O9=YWb|A{`Wy*!*^wq#=%(@b@Ea5tEpXd~iSo3ickXo{08;bX5@_^to7ln1E&T z0Q;oGBr%1;Ad16SY=AKOA{}eYh_8tc3L?r@$1tjx4gNARP0X=T{NSrtJSGt)KBX9R zGc$gehfz3~G{aAz0r0BCNL;~kh~g=n=(bRw^CEN;QymmUxSNZek!VpoB5@FxAmCh% z!aUuN)i;8DPQO802X%zI!B7@&V(}}MiNrzN-DwDiGNk=OoXA_#KhtmFQ%{I@knG34 zoBhKd<3dUQDq9{X{2$?@{$=cA+gZ0P)HB`cBG30@U-k6i^s%C>!<`)`2({kC6XdoQ zgLN2rORJ3an~IBzPl+Owj=-2dfBs3FZ6?%%+IZ{*8OuiJrm3mvL99NG6mw^oW(IxexqP^>vGFdyGp`)W z$He30uY(h`8CA&zqKStS$j1$f7cY)E=oAgMJR|{8T#o8v6INH*^_xiq+n5JYMclJw z$D(Ppq^_;XcN)nU|ox57$L6wa9r*74K$mg+ICYq4I zqBe6tQg?TE-HH_}Yya^cU^7={2aF}qY1|5n&?pYTac27X@#7V!KPikmA&`7Y zzN&;(10TiTg&@;Ym6erB=i!JK$7VJh&jkp?+=A6xkuDPVJD=kacoT$PgQ{USss`mR zzf*zZ@4jQlj%8J1!Flh%4!~9B7=A_` ztj0|+wco)e-_Twl&a)h}1nsZ{M{usM<6K{cf1tb*$|_u2KhxJpO-)^mj9-lcSdLwl zNVzFC&spSu`N%o{>m?2$y~8mf+qZ9T-nen2>&6ed-eE)Lr?j-RN>k&xm5|@*d!Jy{m=FE|iksK6M z5ejM%Om_v}I*0 UIViewController? { - return UIViewController() + return nil } func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { - return UIViewController() - } - - func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: BaseViewController) -> BaseViewController? { - guard let index = promiseViewModel.promiseViewControllerList.firstIndex(of: viewController), - index - 1 >= 0 - else { return nil } - - return promiseViewModel.promiseViewControllerList[index - 1] - } - - func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: BaseViewController) -> BaseViewController? { - guard let index = promiseViewModel.promiseViewControllerList.firstIndex(of: viewController), - index + 1 < promiseViewModel.promiseViewControllerList.count - else { return nil } - - return promiseViewModel.promiseViewControllerList[index + 1] + return nil } } From f5c0d7e327f8c10d4a4b410ad6c3fe75babafc8e Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 22:59:41 +0900 Subject: [PATCH 07/11] =?UTF-8?q?delete/#146=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=83=AD=EB=B0=94=20=EB=86=92=EC=9D=B4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Core/MainTabBarController.swift | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/KkuMulKum/Source/Core/MainTabBarController.swift b/KkuMulKum/Source/Core/MainTabBarController.swift index ea1c12c6..beffd260 100644 --- a/KkuMulKum/Source/Core/MainTabBarController.swift +++ b/KkuMulKum/Source/Core/MainTabBarController.swift @@ -65,24 +65,3 @@ final class MainTabBarController: UITabBarController { ], animated: true) } } - - -class NavigationBar: UINavigationBar { - - var preferredHeight: CGFloat = 44 - - override var frame: CGRect { - get { - return super.frame - } set { - var frame = newValue - frame.size.height = preferredHeight - super.frame = frame - } - } - - override func layoutSubviews() { - super.layoutSubviews() - frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: preferredHeight) - } -} From 9786af27ca903d7e173c5bb34d385e7e890f8e61 Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 23:01:12 +0900 Subject: [PATCH 08/11] =?UTF-8?q?fix/#146=20=EC=9C=A0=EC=A0=80=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=8D=94=EB=AF=B8=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Promise/Cell/ParticipantCollectionViewCell.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift b/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift index 5e69cc3b..df316629 100644 --- a/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift +++ b/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift @@ -16,7 +16,7 @@ class ParticipantCollectionViewCell: BaseCollectionViewCell { } private let userNameLabel: UILabel = UILabel().then { - $0.setText("dddd", style: .caption02, color: .gray6) + $0.setText("userName", style: .caption02, color: .gray6) } override func setupView() { From 71b973a8ac91d7a63b87cfc22987acbc5a721fe4 Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 23:03:44 +0900 Subject: [PATCH 09/11] =?UTF-8?q?fix/#146=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=85=80=20constranint=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Promise/Cell/ParticipantCollectionViewCell.swift | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift b/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift index df316629..3d6489a3 100644 --- a/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift +++ b/KkuMulKum/Source/Promise/Cell/ParticipantCollectionViewCell.swift @@ -25,10 +25,9 @@ class ParticipantCollectionViewCell: BaseCollectionViewCell { override func setupAutoLayout() { profileImageView.snp.makeConstraints { - $0.width.equalTo(Screen.width(68)) $0.height.equalTo(Screen.height(68)) - $0.top.equalToSuperview() - $0.leading.trailing.equalToSuperview().inset(2) + $0.width.equalTo(profileImageView.snp.height) + $0.top.centerX.equalToSuperview() } userNameLabel.snp.makeConstraints { From d8abdfb0af2f84b4cf4919ef488573c00c50465e Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 23:29:17 +0900 Subject: [PATCH 10/11] =?UTF-8?q?fix/#146=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Promise/View/PromiseInfoView.swift | 60 +++++++++++-------- .../PromiseInfoViewController.swift | 22 +++++-- .../PromiseViewController.swift | 50 ++++++++++++---- .../Promise/ViewModel/PromiseViewModel.swift | 3 - 4 files changed, 90 insertions(+), 45 deletions(-) diff --git a/KkuMulKum/Source/Promise/View/PromiseInfoView.swift b/KkuMulKum/Source/Promise/View/PromiseInfoView.swift index 82821464..9fce12d2 100644 --- a/KkuMulKum/Source/Promise/View/PromiseInfoView.swift +++ b/KkuMulKum/Source/Promise/View/PromiseInfoView.swift @@ -18,12 +18,19 @@ class PromiseInfoView: BaseView { $0.contentMode = .scaleAspectFill } - let participantCollectionView: UICollectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout().then { - $0.scrollDirection = .horizontal - $0.minimumInteritemSpacing = 12 - $0.estimatedItemSize = UICollectionViewFlowLayout.automaticSize + let participantCollectionView: UICollectionView = UICollectionView( + frame: .zero, + collectionViewLayout: UICollectionViewFlowLayout().then { + $0.scrollDirection = .horizontal + $0.minimumInteritemSpacing = 12 + $0.estimatedItemSize = .init(width: Screen.width(68), height: Screen.height(88)) }).then { - $0.register(ParticipantCollectionViewCell.self, forCellWithReuseIdentifier: ParticipantCollectionViewCell.reuseIdentifier) + $0.showsHorizontalScrollIndicator = false + $0.contentInset = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 0) + $0.register( + ParticipantCollectionViewCell.self, + forCellWithReuseIdentifier: ParticipantCollectionViewCell.reuseIdentifier + ) } private let backgroundView: UIView = UIView().then { @@ -87,24 +94,28 @@ class PromiseInfoView: BaseView { } override func setupView() { - addSubviews(participantNumberLabel, - chevronButton, - participantCollectionView, - backgroundView, - promiseInfoLabel, - promiseInfoBackgroundView) - - promiseInfoBackgroundView.addSubviews(locationInfoLabel, - locationContentLabel, - locationDivideView, - timeInfoLabel, - timeContentLabel, - timeDivideView, - readyLevelInfoLabel, - readyLevelContentLabel, - readyLevelDivideView, - penaltyLevelInfoLabel, - penaltyLevelContentLabel) + addSubviews( + participantNumberLabel, + chevronButton, + participantCollectionView, + backgroundView, + promiseInfoLabel, + promiseInfoBackgroundView + ) + + promiseInfoBackgroundView.addSubviews( + locationInfoLabel, + locationContentLabel, + locationDivideView, + timeInfoLabel, + timeContentLabel, + timeDivideView, + readyLevelInfoLabel, + readyLevelContentLabel, + readyLevelDivideView, + penaltyLevelInfoLabel, + penaltyLevelContentLabel + ) } override func setupAutoLayout() { @@ -122,8 +133,7 @@ class PromiseInfoView: BaseView { participantCollectionView.snp.makeConstraints { $0.top.equalTo(participantNumberLabel.snp.bottom).offset(20) - $0.leading.equalTo(participantNumberLabel) - $0.trailing.equalToSuperview() + $0.leading.trailing.equalToSuperview() $0.height.equalTo(Screen.height(88)) } diff --git a/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift b/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift index 6fef9bc9..47a430cb 100644 --- a/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/PromiseInfoViewController.swift @@ -30,13 +30,25 @@ class PromiseInfoViewController: BaseViewController { } -extension PromiseInfoViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { +extension PromiseInfoViewController: UICollectionViewDataSource { + func collectionView( + _ collectionView: UICollectionView, + numberOfItemsInSection section: Int + ) -> Int { return 10 } - - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ParticipantCollectionViewCell.reuseIdentifier, for: indexPath) as? ParticipantCollectionViewCell else { return UICollectionViewCell() } +} + + +extension PromiseInfoViewController: UICollectionViewDelegateFlowLayout { + func collectionView( + _ collectionView: UICollectionView, + cellForItemAt indexPath: IndexPath + ) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: ParticipantCollectionViewCell.reuseIdentifier, + for: indexPath) as? ParticipantCollectionViewCell + else { return UICollectionViewCell() } return cell } diff --git a/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift b/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift index c563458c..db553a33 100644 --- a/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift @@ -10,10 +10,18 @@ import UIKit class PromiseViewController: BaseViewController { private let promiseViewModel = PromiseViewModel() - private lazy var promiseSegmentedControl = PromiseSegmentedControl(items: ["약속 정보", "준비 현황", "지각 꾸물이"]) + private let promiseViewControllerList: [BaseViewController] = [PromiseInfoViewController(), + ReadyStatusViewController(), + TardyViewController()] - private let promisePageViewController = UIPageViewController(transitionStyle: .scroll, - navigationOrientation: .vertical) + private lazy var promiseSegmentedControl = PromiseSegmentedControl( + items: ["약속 정보", "준비 현황", "지각 꾸물이"] + ) + + private let promisePageViewController = UIPageViewController( + transitionStyle: .scroll, + navigationOrientation: .vertical + ) override func viewDidLoad() { super.viewDidLoad() @@ -24,12 +32,16 @@ class PromiseViewController: BaseViewController { self.navigationItem.title = "기말고사 모각작" addChild(promisePageViewController) - [ + view.addSubviews( promiseSegmentedControl, - promisePageViewController.view - ].forEach { view.addSubview($0) } + promisePageViewController.view + ) - promisePageViewController.setViewControllers([promiseViewModel.promiseViewControllerList[0]], direction: .forward, animated: true) + promisePageViewController.setViewControllers( + [promiseViewControllerList[0]], + direction: .forward, + animated: true + ) promiseSegmentedControl.snp.makeConstraints { $0.top.equalTo(view.safeAreaLayoutGuide) @@ -44,7 +56,11 @@ class PromiseViewController: BaseViewController { } override func setupAction() { - promiseSegmentedControl.addTarget(self, action: #selector(didSegmentedControlIndexUpdated), for: .valueChanged) + promiseSegmentedControl.addTarget( + self, + action: #selector(didSegmentedControlIndexUpdated), + for: .valueChanged + ) } override func setupDelegate() { @@ -53,23 +69,33 @@ class PromiseViewController: BaseViewController { } @objc private func didSegmentedControlIndexUpdated() { - let direction: UIPageViewController.NavigationDirection = promiseViewModel.currentPage.value <= promiseSegmentedControl.selectedSegmentIndex ? .forward : .reverse + let condition = promiseViewModel.currentPage.value <= promiseSegmentedControl.selectedSegmentIndex + let direction: UIPageViewController.NavigationDirection = condition ? .forward : .reverse + let (width, count, selectedIndex) = ( + promiseSegmentedControl.bounds.width, + promiseSegmentedControl.numberOfSegments, + promiseSegmentedControl.selectedSegmentIndex + ) promiseSegmentedControl.selectedUnderLineView.snp.updateConstraints { - $0.leading.equalToSuperview().offset((promiseSegmentedControl.bounds.width / CGFloat(promiseSegmentedControl.numberOfSegments)) * CGFloat(promiseSegmentedControl.selectedSegmentIndex)) + + $0.leading.equalToSuperview().offset((width / CGFloat(count)) * CGFloat(selectedIndex)) } promiseViewModel.didSegmentIndexChanged(index: promiseSegmentedControl.selectedSegmentIndex) promisePageViewController.setViewControllers([ - promiseViewModel.promiseViewControllerList[promiseViewModel.currentPage.value] + promiseViewControllerList[promiseViewModel.currentPage.value] ], direction: direction, animated: false) } } extension PromiseViewController: UIPageViewControllerDelegate, UIPageViewControllerDataSource { - func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { + func pageViewController( + _ pageViewController: UIPageViewController, + viewControllerAfter viewController: UIViewController + ) -> UIViewController? { return nil } diff --git a/KkuMulKum/Source/Promise/ViewModel/PromiseViewModel.swift b/KkuMulKum/Source/Promise/ViewModel/PromiseViewModel.swift index b7e09038..196d2d36 100644 --- a/KkuMulKum/Source/Promise/ViewModel/PromiseViewModel.swift +++ b/KkuMulKum/Source/Promise/ViewModel/PromiseViewModel.swift @@ -10,9 +10,6 @@ import Foundation class PromiseViewModel { var currentPage = ObservablePattern(0) - let promiseViewControllerList: [BaseViewController] = [PromiseInfoViewController(), - ReadyStatusViewController(), - TardyViewController()] func didSegmentIndexChanged(index: Int) { currentPage.value = index From c47aaa61d619815d888ee267af6548665cec5f31 Mon Sep 17 00:00:00 2001 From: youz2me Date: Wed, 10 Jul 2024 23:54:27 +0900 Subject: [PATCH 11/11] =?UTF-8?q?fix/#146=20=EA=B0=9C=ED=96=89=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=BD=94=EB=93=9C=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Promise/View/PromiseSegmentedControl.swift | 1 - KkuMulKum/Source/Promise/View/ReadyStatusView.swift | 2 -- .../ViewController/PromiseViewController.swift | 1 - .../ViewController/ReadyStatusViewController.swift | 13 ------------- .../ViewController/TardyViewController.swift | 13 ------------- 5 files changed, 30 deletions(-) diff --git a/KkuMulKum/Source/Promise/View/PromiseSegmentedControl.swift b/KkuMulKum/Source/Promise/View/PromiseSegmentedControl.swift index 8c762571..7f387a6a 100644 --- a/KkuMulKum/Source/Promise/View/PromiseSegmentedControl.swift +++ b/KkuMulKum/Source/Promise/View/PromiseSegmentedControl.swift @@ -26,7 +26,6 @@ class PromiseSegmentedControl: UISegmentedControl { setupTextAttribute() setupBackgroundLineView() setupBackgroundAndDivider() - } required init?(coder: NSCoder) { diff --git a/KkuMulKum/Source/Promise/View/ReadyStatusView.swift b/KkuMulKum/Source/Promise/View/ReadyStatusView.swift index 0368114a..37ce3d08 100644 --- a/KkuMulKum/Source/Promise/View/ReadyStatusView.swift +++ b/KkuMulKum/Source/Promise/View/ReadyStatusView.swift @@ -8,8 +8,6 @@ import UIKit class ReadyStatusView: BaseView { - - override init(frame: CGRect) { super.init(frame: frame) } diff --git a/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift b/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift index db553a33..33335cfa 100644 --- a/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/PromiseViewController.swift @@ -78,7 +78,6 @@ class PromiseViewController: BaseViewController { ) promiseSegmentedControl.selectedUnderLineView.snp.updateConstraints { - $0.leading.equalToSuperview().offset((width / CGFloat(count)) * CGFloat(selectedIndex)) } diff --git a/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift b/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift index 13508e29..78876385 100644 --- a/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/ReadyStatusViewController.swift @@ -8,7 +8,6 @@ import UIKit class ReadyStatusViewController: BaseViewController { - private let readyStatusView: ReadyStatusView = ReadyStatusView() override func viewDidLoad() { @@ -16,16 +15,4 @@ class ReadyStatusViewController: BaseViewController { view.addSubview(readyStatusView) } - - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ - } diff --git a/KkuMulKum/Source/Promise/ViewController/TardyViewController.swift b/KkuMulKum/Source/Promise/ViewController/TardyViewController.swift index ab16bf4e..dfeb5c40 100644 --- a/KkuMulKum/Source/Promise/ViewController/TardyViewController.swift +++ b/KkuMulKum/Source/Promise/ViewController/TardyViewController.swift @@ -8,22 +8,9 @@ import UIKit class TardyViewController: BaseViewController { - override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .green } - - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ - }