From 03f94e04a4fa3f0e1bc388e8f07ded551968e211 Mon Sep 17 00:00:00 2001 From: solbat Date: Wed, 14 Dec 2022 19:19:06 +0900 Subject: [PATCH 01/16] =?UTF-8?q?[fix]=20infinite=20carousel=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TabBar/Home/HomeViewController.swift | 54 ++++++++++++++----- .../Scene/TabBar/Home/HomeViewModel.swift | 2 +- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift index 00a076f..bac42e0 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift @@ -10,12 +10,29 @@ import RxSwift import SnapKit import UIKit -final class HomeViewController: UIViewController, BaseViewController { +final class HomeViewController: UIViewController, BaseViewController, UICollectionViewDelegate, UICollectionViewDataSource { + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return datasource.isEmpty ? 0 : Int.max + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: HomeCapsuleCell.identifier, + for: indexPath + ) as? HomeCapsuleCell else { + return UICollectionViewCell() + } + cell.configure(capsuleCellModel: datasource[indexPath.item % 8]) + return cell + } + // MARK: - Properties var viewModel: HomeViewModel? var disposeBag = DisposeBag() - + + var datasource: [HomeCapsuleCellItem] = [] + var centerIndex: CGFloat { return homeView.capsuleCollectionView.contentOffset.x / (FrameResource.homeCapsuleCellWidth * 0.75 + 10) } @@ -30,6 +47,7 @@ final class HomeViewController: UIViewController, BaseViewController { title = "홈" configureView() bind() + homeView.capsuleCollectionView.dataSource = self } override func viewWillAppear(_ animated: Bool) { @@ -49,6 +67,11 @@ final class HomeViewController: UIViewController, BaseViewController { } else { owner.emptyView = nil owner.showHomeView() + owner.datasource = capsuleCellItems + owner.homeView.capsuleCollectionView.reloadData() + DispatchQueue.main.async { + owner.homeView.capsuleCollectionView.scrollToItem(at: IndexPath(item: 1000000000, section: 0), at: .centeredHorizontally, animated: false) + } } } .disposed(by: disposeBag) @@ -88,17 +111,21 @@ final class HomeViewController: UIViewController, BaseViewController { return } - viewModel.output.featuredCapsuleCellItems - .bind(to: homeView.capsuleCollectionView.rx.items) { collectionView, index, element in - guard let cell = collectionView.dequeueReusableCell( - withReuseIdentifier: HomeCapsuleCell.identifier, - for: IndexPath(item: index, section: 0) - ) as? HomeCapsuleCell else { - return UICollectionViewCell() - } - cell.configure(capsuleCellModel: element) - return cell - }.disposed(by: disposeBag) + +// viewModel.output.featuredCapsuleCellItems +// .bind(to: homeView.capsuleCollectionView.rx.items) { collectionView, index, element in +// +// +// +// guard let cell = collectionView.dequeueReusableCell( +// withReuseIdentifier: HomeCapsuleCell.ident ifier, +// for: IndexPath(item: index, section: 0) +// ) as? HomeCapsuleCell else { +// return UICollectionViewCell() +// } +// cell.configure(capsuleCellModel: element) +// return cell +// }.disposed(by: disposeBag) viewModel.output.userCapsuleStatus .subscribe(onNext: { [weak self] status in @@ -151,6 +178,7 @@ final class HomeViewController: UIViewController, BaseViewController { .withUnretained(self) .subscribe( onNext: { owner, indexPath in + print(owner.centerIndex) if owner.getIndexRange(index: indexPath.item) ~= owner.centerIndex { if let cell = owner.homeView.capsuleCollectionView.cellForItem(at: indexPath) as? HomeCapsuleCell { guard let uuid = cell.uuid else { diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift index bb7f162..74e2c08 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift @@ -56,7 +56,7 @@ final class HomeViewModel: BaseViewModel, CapsuleCellNeedable { owner.output.featuredCapsuleCellItems.accept( CapsuleType.allCases .map { owner.getHomeCapsuleCellItem(capsules: capsuleList, type: $0) } - .compactMap({ $0 }) + .compactMap({ $0 }) // + Array(repeating: nil, count: Int.max) ) }) From 9607f60672ef9c7ff92c767b45a751f20b3dcf8c Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 15 Dec 2022 21:43:34 +0900 Subject: [PATCH 02/16] =?UTF-8?q?[refactor]=20HomeVC=20:=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20delegate=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?=EB=B0=8F=20extension=EC=9C=BC=EB=A1=9C=20=EB=B6=84=EB=A6=AC=20?= =?UTF-8?q?(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TabBar/Home/HomeViewController.swift | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift index bac42e0..1bc8af3 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift @@ -10,22 +10,7 @@ import RxSwift import SnapKit import UIKit -final class HomeViewController: UIViewController, BaseViewController, UICollectionViewDelegate, UICollectionViewDataSource { - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return datasource.isEmpty ? 0 : Int.max - } - - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - guard let cell = collectionView.dequeueReusableCell( - withReuseIdentifier: HomeCapsuleCell.identifier, - for: indexPath - ) as? HomeCapsuleCell else { - return UICollectionViewCell() - } - cell.configure(capsuleCellModel: datasource[indexPath.item % 8]) - return cell - } - +final class HomeViewController: UIViewController, BaseViewController{ // MARK: - Properties var viewModel: HomeViewModel? @@ -192,3 +177,20 @@ final class HomeViewController: UIViewController, BaseViewController, UICollecti }).disposed(by: disposeBag) } } + +extension HomeViewController: UICollectionViewDataSource { + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return datasource.isEmpty ? 0 : Int.max + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: HomeCapsuleCell.identifier, + for: indexPath + ) as? HomeCapsuleCell else { + return UICollectionViewCell() + } + cell.configure(capsuleCellModel: datasource[indexPath.item % 8]) + return cell + } +} From 74e36af551dff2ba6017e1c4d7d3516f75f728d1 Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 15 Dec 2022 21:44:11 +0900 Subject: [PATCH 03/16] =?UTF-8?q?[fix]=20HomeVC=20:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scene/TabBar/Home/HomeViewController.swift | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift index 1bc8af3..63158e7 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift @@ -96,22 +96,6 @@ final class HomeViewController: UIViewController, BaseViewController{ return } - -// viewModel.output.featuredCapsuleCellItems -// .bind(to: homeView.capsuleCollectionView.rx.items) { collectionView, index, element in -// -// -// -// guard let cell = collectionView.dequeueReusableCell( -// withReuseIdentifier: HomeCapsuleCell.ident ifier, -// for: IndexPath(item: index, section: 0) -// ) as? HomeCapsuleCell else { -// return UICollectionViewCell() -// } -// cell.configure(capsuleCellModel: element) -// return cell -// }.disposed(by: disposeBag) - viewModel.output.userCapsuleStatus .subscribe(onNext: { [weak self] status in self?.homeView.mainStatusLabel.updateUserCapsuleStatus( From c1dabb6ed3c8022bb81adf243b2e254bc282cced Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 15 Dec 2022 21:48:47 +0900 Subject: [PATCH 04/16] =?UTF-8?q?[fix]=20HomeVC=20:=20=EC=82=AC=EC=86=8C?= =?UTF-8?q?=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift index 63158e7..e3f5829 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift @@ -40,6 +40,8 @@ final class HomeViewController: UIViewController, BaseViewController{ viewModel?.input.viewWillAppear.onNext(()) } + // MARK: - Functions + private func configureView() { view.backgroundColor = .themeBackground @@ -55,7 +57,8 @@ final class HomeViewController: UIViewController, BaseViewController{ owner.datasource = capsuleCellItems owner.homeView.capsuleCollectionView.reloadData() DispatchQueue.main.async { - owner.homeView.capsuleCollectionView.scrollToItem(at: IndexPath(item: 1000000000, section: 0), at: .centeredHorizontally, animated: false) + Thread.sleep(forTimeInterval: 0.01) + owner.homeView.capsuleCollectionView.scrollToItem(at: IndexPath(item: 10000000, section: 0), at: .centeredHorizontally, animated: false) } } } From 732292571cd8137fa087de75569f5f508af2e4dd Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 15 Dec 2022 21:49:38 +0900 Subject: [PATCH 05/16] =?UTF-8?q?[fix]=20HomeVC=20:=20=EB=A7=A4=EC=A7=81?= =?UTF-8?q?=EB=84=98=EB=B2=84=20=EC=A0=9C=EA=B1=B0=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift index e3f5829..8e83dce 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift @@ -10,7 +10,7 @@ import RxSwift import SnapKit import UIKit -final class HomeViewController: UIViewController, BaseViewController{ +final class HomeViewController: UIViewController, BaseViewController { // MARK: - Properties var viewModel: HomeViewModel? @@ -177,7 +177,7 @@ extension HomeViewController: UICollectionViewDataSource { ) as? HomeCapsuleCell else { return UICollectionViewCell() } - cell.configure(capsuleCellModel: datasource[indexPath.item % 8]) + cell.configure(capsuleCellModel: datasource[indexPath.item % datasource.count]) return cell } } From 6bb2b4bf3f813f67c3db50eb7772f199bdd55734 Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 15 Dec 2022 22:39:39 +0900 Subject: [PATCH 06/16] =?UTF-8?q?[fix]=20HomeVC=20:=20datasource=EB=A5=BC?= =?UTF-8?q?=20viewModel=EB=A1=9C=20=EC=98=AE=EA=B8=B0=EA=B8=B0=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TabBar/Home/HomeViewController.swift | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift index 8e83dce..8f0be6d 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift @@ -15,9 +15,7 @@ final class HomeViewController: UIViewController, BaseViewController { var viewModel: HomeViewModel? var disposeBag = DisposeBag() - - var datasource: [HomeCapsuleCellItem] = [] - + var centerIndex: CGFloat { return homeView.capsuleCollectionView.contentOffset.x / (FrameResource.homeCapsuleCellWidth * 0.75 + 10) } @@ -54,11 +52,13 @@ final class HomeViewController: UIViewController, BaseViewController { } else { owner.emptyView = nil owner.showHomeView() - owner.datasource = capsuleCellItems owner.homeView.capsuleCollectionView.reloadData() DispatchQueue.main.async { Thread.sleep(forTimeInterval: 0.01) - owner.homeView.capsuleCollectionView.scrollToItem(at: IndexPath(item: 10000000, section: 0), at: .centeredHorizontally, animated: false) + owner.homeView.capsuleCollectionView.scrollToItem( + at: IndexPath(item: 10000000, section: 0), + at: .centeredHorizontally, animated: false + ) } } } @@ -167,7 +167,10 @@ final class HomeViewController: UIViewController, BaseViewController { extension HomeViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return datasource.isEmpty ? 0 : Int.max + guard let featuredCapsules = viewModel?.output.featuredCapsules else { + return 0 + } + return featuredCapsules.isEmpty ? 0 : Int.max } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { @@ -177,7 +180,10 @@ extension HomeViewController: UICollectionViewDataSource { ) as? HomeCapsuleCell else { return UICollectionViewCell() } - cell.configure(capsuleCellModel: datasource[indexPath.item % datasource.count]) + guard let featuredCapsules = viewModel?.output.featuredCapsules else { + return cell + } + cell.configure(capsuleCellModel: featuredCapsules[indexPath.item % featuredCapsules.count]) return cell } } From d4ef142e6c7e8c696a8fcddfabbda0c0dc0089df Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 15 Dec 2022 22:40:44 +0900 Subject: [PATCH 07/16] =?UTF-8?q?[fix]=20HomeVM=20:=20datasource=EB=A5=BC?= =?UTF-8?q?=20featuredCapsules=EB=A1=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20VM=EC=9C=BC=EB=A1=9C=20=EC=98=AE?= =?UTF-8?q?=EA=B8=B0=EA=B8=B0=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift index 74e2c08..2859261 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift @@ -29,6 +29,7 @@ final class HomeViewModel: BaseViewModel, CapsuleCellNeedable { } struct Output: ViewModelOutput { + var featuredCapsules = [HomeCapsuleCellItem]() let featuredCapsuleCellItems = PublishRelay<[HomeCapsuleCellItem]>() let userCapsuleStatus = PublishRelay() } @@ -53,10 +54,12 @@ final class HomeViewModel: BaseViewModel, CapsuleCellNeedable { let status = UserCapsuleStatus(nickname: nickname, capsuleCounts: capsuleList.count) owner.output.userCapsuleStatus.accept(status) + let featuredCapsules = CapsuleType.allCases + .map { owner.getHomeCapsuleCellItem(capsules: capsuleList, type: $0) } + .compactMap({ $0 }) + owner.output.featuredCapsules = featuredCapsules owner.output.featuredCapsuleCellItems.accept( - CapsuleType.allCases - .map { owner.getHomeCapsuleCellItem(capsules: capsuleList, type: $0) } - .compactMap({ $0 }) // + Array(repeating: nil, count: Int.max) + featuredCapsules ) }) From 624491e177fa3b688bbc26805b3c3e15bf95c923 Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 15 Dec 2022 22:42:40 +0900 Subject: [PATCH 08/16] =?UTF-8?q?[fix]=20HomeVM=20:=20map=EC=9D=84=20compa?= =?UTF-8?q?ctMap=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift index 2859261..4cc5492 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewModel.swift @@ -55,8 +55,7 @@ final class HomeViewModel: BaseViewModel, CapsuleCellNeedable { owner.output.userCapsuleStatus.accept(status) let featuredCapsules = CapsuleType.allCases - .map { owner.getHomeCapsuleCellItem(capsules: capsuleList, type: $0) } - .compactMap({ $0 }) + .compactMap { owner.getHomeCapsuleCellItem(capsules: capsuleList, type: $0) } owner.output.featuredCapsules = featuredCapsules owner.output.featuredCapsuleCellItems.accept( featuredCapsules From 75905eb5a23b949832166ec32912490459f8498d Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 15 Dec 2022 23:05:34 +0900 Subject: [PATCH 09/16] =?UTF-8?q?[feat]=20=EB=9E=9C=EB=8D=A4=20=EC=9A=94?= =?UTF-8?q?=EC=86=8C=20=EC=B6=94=EA=B0=80=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift index 8f0be6d..a731f49 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift @@ -55,8 +55,9 @@ final class HomeViewController: UIViewController, BaseViewController { owner.homeView.capsuleCollectionView.reloadData() DispatchQueue.main.async { Thread.sleep(forTimeInterval: 0.01) + var randomInt = Int.random(in: 1000000..<1000008) owner.homeView.capsuleCollectionView.scrollToItem( - at: IndexPath(item: 10000000, section: 0), + at: IndexPath(item: randomInt, section: 0), at: .centeredHorizontally, animated: false ) } From c19e45080c995c7f6536a130426d79c37ee15596 Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 22 Dec 2022 19:12:32 +0900 Subject: [PATCH 10/16] =?UTF-8?q?[feat]=20MyCollectionView=20:=20reloadDat?= =?UTF-8?q?a=EA=B0=80=20=EC=A2=85=EB=A3=8C=EB=90=98=EB=8A=94=20=EC=8B=9C?= =?UTF-8?q?=EC=A0=90=EC=9D=84=20=ED=8C=8C=EC=95=85=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EA=B5=AC=ED=98=84=20(#123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scene/TabBar/Home/MyCollectionView.swift | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/MyCollectionView.swift diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/MyCollectionView.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/MyCollectionView.swift new file mode 100644 index 0000000..9900ae5 --- /dev/null +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/MyCollectionView.swift @@ -0,0 +1,24 @@ +// +// MyCollectionView.swift +// SpaceCapsule +// +// Created by 김민중 on 2022/12/22. +// + +import UIKit + +class MyCollectionView: UICollectionView { + + private var reloadDataCompletionBlock: (() -> Void)? + + func reloadDataWithCompletion(_ complete: @escaping () -> Void) { + reloadDataCompletionBlock = complete + super.reloadData() + } + + override func layoutSubviews() { + super.layoutSubviews() + reloadDataCompletionBlock?() + reloadDataCompletionBlock = nil + } +} From 5adf45cc676952395f616f9ad76321640e0a6dae Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 22 Dec 2022 19:14:09 +0900 Subject: [PATCH 11/16] =?UTF-8?q?[fix]=20HomeVC=20:=20reloadData=EA=B0=80?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C=EB=90=98=EB=8A=94=20=EC=8B=9C=EC=A0=90?= =?UTF-8?q?=EC=97=90=20=EB=A1=9C=EC=A7=81=EC=9D=84=20=EC=88=98=ED=96=89?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD=20(#123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TabBar/Home/HomeViewController.swift | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift index a731f49..8d45d4e 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeViewController.swift @@ -28,9 +28,12 @@ final class HomeViewController: UIViewController, BaseViewController { override func viewDidLoad() { super.viewDidLoad() title = "홈" + + homeView.capsuleCollectionView.dataSource = self + configureView() bind() - homeView.capsuleCollectionView.dataSource = self + } override func viewWillAppear(_ animated: Bool) { @@ -42,7 +45,7 @@ final class HomeViewController: UIViewController, BaseViewController { private func configureView() { view.backgroundColor = .themeBackground - + viewModel?.output.featuredCapsuleCellItems .withUnretained(self) .bind { owner, capsuleCellItems in @@ -52,20 +55,21 @@ final class HomeViewController: UIViewController, BaseViewController { } else { owner.emptyView = nil owner.showHomeView() - owner.homeView.capsuleCollectionView.reloadData() - DispatchQueue.main.async { - Thread.sleep(forTimeInterval: 0.01) - var randomInt = Int.random(in: 1000000..<1000008) + owner.homeView.capsuleCollectionView.reloadDataWithCompletion { + guard let featuredCapsules = owner.viewModel?.output.featuredCapsules else { + return + } + let startIndex = 100_000_000 + let randomInt = Int.random(in: startIndex..<(startIndex + featuredCapsules.count)) owner.homeView.capsuleCollectionView.scrollToItem( at: IndexPath(item: randomInt, section: 0), - at: .centeredHorizontally, animated: false + at: .centeredHorizontally, + animated: false ) } } } .disposed(by: disposeBag) - - AppDataManager.shared.fetchCapsules() } private func showEmptyView() { @@ -151,7 +155,6 @@ final class HomeViewController: UIViewController, BaseViewController { .withUnretained(self) .subscribe( onNext: { owner, indexPath in - print(owner.centerIndex) if owner.getIndexRange(index: indexPath.item) ~= owner.centerIndex { if let cell = owner.homeView.capsuleCollectionView.cellForItem(at: indexPath) as? HomeCapsuleCell { guard let uuid = cell.uuid else { From 8302f47c8c1b7dbda765b3cc2ac572da8baf816a Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 22 Dec 2022 19:14:38 +0900 Subject: [PATCH 12/16] =?UTF-8?q?[fix]=20HomeView=20:=20MyCollectionView?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(#123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift index 04df72b..f073d47 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift @@ -16,9 +16,9 @@ final class HomeView: UIView, BaseView { color: .themeGray300 ) - lazy var capsuleCollectionView: UICollectionView = { + lazy var capsuleCollectionView: MyCollectionView = { let layout = CarouselCollectionViewFlowLayout() - let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) + let collectionView = MyCollectionView(frame: .zero, collectionViewLayout: layout) collectionView.register(HomeCapsuleCell.self, forCellWithReuseIdentifier: HomeCapsuleCell.identifier) collectionView.backgroundColor = .none collectionView.showsHorizontalScrollIndicator = false From cafef0ebcbfc53fb501c05863c234951f88dc541 Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 22 Dec 2022 19:15:31 +0900 Subject: [PATCH 13/16] =?UTF-8?q?[chore]=20=EB=B3=80=EA=B2=BD=EB=90=9C=20p?= =?UTF-8?q?roject=20=ED=8C=8C=EC=9D=BC=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj b/SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj index c2feb1e..608f19b 100644 --- a/SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj +++ b/SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj @@ -160,6 +160,7 @@ 4AA4C5B529473D8600171D0D /* MovableToCapsuleAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA4C5B429473D8600171D0D /* MovableToCapsuleAccess.swift */; }; 4AA4C5B72948729200171D0D /* Calendar+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA4C5B62948729200171D0D /* Calendar+.swift */; }; 4AF16AE7292B1F8400787C5C /* CustomAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF16AE6292B1F8400787C5C /* CustomAnnotationView.swift */; }; + 594C6A8F295462D400B42815 /* MyCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 594C6A8E295462D400B42815 /* MyCollectionView.swift */; }; 599C19D2292B82D000517E93 /* LoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 599C19D1292B82D000517E93 /* LoadingViewController.swift */; }; 599C19D4292B838D00517E93 /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 599C19D3292B838D00517E93 /* LoadingView.swift */; }; 599C1A2C292C9F5B00517E93 /* .swiftlint.yml in Resources */ = {isa = PBXBuildFile; fileRef = 599C1A2B292C9F5B00517E93 /* .swiftlint.yml */; }; @@ -348,6 +349,7 @@ 4AA4C5B429473D8600171D0D /* MovableToCapsuleAccess.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovableToCapsuleAccess.swift; sourceTree = ""; }; 4AA4C5B62948729200171D0D /* Calendar+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Calendar+.swift"; sourceTree = ""; }; 4AF16AE6292B1F8400787C5C /* CustomAnnotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomAnnotationView.swift; sourceTree = ""; }; + 594C6A8E295462D400B42815 /* MyCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCollectionView.swift; sourceTree = ""; }; 599C19D1292B82D000517E93 /* LoadingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Loading\U0010ViewController.swift"; sourceTree = ""; }; 599C19D3292B838D00517E93 /* LoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingView.swift; sourceTree = ""; }; 599C1A2B292C9F5B00517E93 /* .swiftlint.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = ""; }; @@ -722,6 +724,7 @@ 288A8ECB29235BE9000229D2 /* HomeViewController.swift */, 288A8ECD29235BEF000229D2 /* HomeViewModel.swift */, 59D8CFB42935FDAC00FD9CF6 /* CarouselCollectionViewFlowLayout.swift */, + 594C6A8E295462D400B42815 /* MyCollectionView.swift */, 59D8CFB6293609B300FD9CF6 /* Components */, ); path = Home; @@ -1190,6 +1193,7 @@ 0DD83D13292F51960020F15C /* LoadingIndicatorView.swift in Sources */, 0DD83D0F292F1BAD0020F15C /* CustomScrollView.swift in Sources */, 0D706137292C630D0077787E /* DatePickerViewModel.swift in Sources */, + 594C6A8F295462D400B42815 /* MyCollectionView.swift in Sources */, 0D90DAF929239A81000DCC84 /* UIImage+.swift in Sources */, 0DF9D2A5293F1CB3001C05DE /* DetailImageView.swift in Sources */, 0DE786E1292BBDEC007EF260 /* DatePickerViewController.swift in Sources */, From 3681bd5b5ecee0c9b45b87ca1f3b2aebf4ce11ef Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 22 Dec 2022 19:20:12 +0900 Subject: [PATCH 14/16] =?UTF-8?q?[fix]=20MyCollectionView=20->=20CustomCol?= =?UTF-8?q?lectionView=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD=20(#123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomCollectionView.swift} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename SpaceCapsule/SpaceCapsule/{Scene/TabBar/Home/MyCollectionView.swift => Components/CustomCollectionView.swift} (91%) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/MyCollectionView.swift b/SpaceCapsule/SpaceCapsule/Components/CustomCollectionView.swift similarity index 91% rename from SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/MyCollectionView.swift rename to SpaceCapsule/SpaceCapsule/Components/CustomCollectionView.swift index 9900ae5..b12f6d0 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/MyCollectionView.swift +++ b/SpaceCapsule/SpaceCapsule/Components/CustomCollectionView.swift @@ -7,7 +7,7 @@ import UIKit -class MyCollectionView: UICollectionView { +class CustomCollectionView: UICollectionView { private var reloadDataCompletionBlock: (() -> Void)? From 139c0afe8ab085c91e034b71653b2aea0b0f29a5 Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 22 Dec 2022 19:20:33 +0900 Subject: [PATCH 15/16] =?UTF-8?q?[fix]=20CustomCollectionView=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD(#123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift index f073d47..a15281a 100644 --- a/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift +++ b/SpaceCapsule/SpaceCapsule/Scene/TabBar/Home/HomeView.swift @@ -16,9 +16,9 @@ final class HomeView: UIView, BaseView { color: .themeGray300 ) - lazy var capsuleCollectionView: MyCollectionView = { + lazy var capsuleCollectionView: CustomCollectionView = { let layout = CarouselCollectionViewFlowLayout() - let collectionView = MyCollectionView(frame: .zero, collectionViewLayout: layout) + let collectionView = CustomCollectionView(frame: .zero, collectionViewLayout: layout) collectionView.register(HomeCapsuleCell.self, forCellWithReuseIdentifier: HomeCapsuleCell.identifier) collectionView.backgroundColor = .none collectionView.showsHorizontalScrollIndicator = false From 213b460eb0e1e05789d1675d289e4c91fb065b6a Mon Sep 17 00:00:00 2001 From: solbat Date: Thu, 22 Dec 2022 19:21:03 +0900 Subject: [PATCH 16/16] =?UTF-8?q?[chore]=20project=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj b/SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj index 608f19b..9e73d1d 100644 --- a/SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj +++ b/SpaceCapsule/SpaceCapsule.xcodeproj/project.pbxproj @@ -160,7 +160,7 @@ 4AA4C5B529473D8600171D0D /* MovableToCapsuleAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA4C5B429473D8600171D0D /* MovableToCapsuleAccess.swift */; }; 4AA4C5B72948729200171D0D /* Calendar+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA4C5B62948729200171D0D /* Calendar+.swift */; }; 4AF16AE7292B1F8400787C5C /* CustomAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF16AE6292B1F8400787C5C /* CustomAnnotationView.swift */; }; - 594C6A8F295462D400B42815 /* MyCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 594C6A8E295462D400B42815 /* MyCollectionView.swift */; }; + 594C6A8F295462D400B42815 /* CustomCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 594C6A8E295462D400B42815 /* CustomCollectionView.swift */; }; 599C19D2292B82D000517E93 /* LoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 599C19D1292B82D000517E93 /* LoadingViewController.swift */; }; 599C19D4292B838D00517E93 /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 599C19D3292B838D00517E93 /* LoadingView.swift */; }; 599C1A2C292C9F5B00517E93 /* .swiftlint.yml in Resources */ = {isa = PBXBuildFile; fileRef = 599C1A2B292C9F5B00517E93 /* .swiftlint.yml */; }; @@ -349,7 +349,7 @@ 4AA4C5B429473D8600171D0D /* MovableToCapsuleAccess.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovableToCapsuleAccess.swift; sourceTree = ""; }; 4AA4C5B62948729200171D0D /* Calendar+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Calendar+.swift"; sourceTree = ""; }; 4AF16AE6292B1F8400787C5C /* CustomAnnotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomAnnotationView.swift; sourceTree = ""; }; - 594C6A8E295462D400B42815 /* MyCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCollectionView.swift; sourceTree = ""; }; + 594C6A8E295462D400B42815 /* CustomCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomCollectionView.swift; sourceTree = ""; }; 599C19D1292B82D000517E93 /* LoadingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Loading\U0010ViewController.swift"; sourceTree = ""; }; 599C19D3292B838D00517E93 /* LoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingView.swift; sourceTree = ""; }; 599C1A2B292C9F5B00517E93 /* .swiftlint.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = ""; }; @@ -410,6 +410,7 @@ 0DA05E1C29308B8400B08FA5 /* CustomNavigationController.swift */, 0DD83D0E292F1BAD0020F15C /* CustomScrollView.swift */, 0DCB22922924CE58002CB095 /* CustomTabBarController.swift */, + 594C6A8E295462D400B42815 /* CustomCollectionView.swift */, 0DFF50DE2940587600079FA6 /* RefreshButton.swift */, 0DFF50DC29402E3100079FA6 /* EmptyView.swift */, 0DD83D12292F51960020F15C /* LoadingIndicatorView.swift */, @@ -724,7 +725,6 @@ 288A8ECB29235BE9000229D2 /* HomeViewController.swift */, 288A8ECD29235BEF000229D2 /* HomeViewModel.swift */, 59D8CFB42935FDAC00FD9CF6 /* CarouselCollectionViewFlowLayout.swift */, - 594C6A8E295462D400B42815 /* MyCollectionView.swift */, 59D8CFB6293609B300FD9CF6 /* Components */, ); path = Home; @@ -1193,7 +1193,7 @@ 0DD83D13292F51960020F15C /* LoadingIndicatorView.swift in Sources */, 0DD83D0F292F1BAD0020F15C /* CustomScrollView.swift in Sources */, 0D706137292C630D0077787E /* DatePickerViewModel.swift in Sources */, - 594C6A8F295462D400B42815 /* MyCollectionView.swift in Sources */, + 594C6A8F295462D400B42815 /* CustomCollectionView.swift in Sources */, 0D90DAF929239A81000DCC84 /* UIImage+.swift in Sources */, 0DF9D2A5293F1CB3001C05DE /* DetailImageView.swift in Sources */, 0DE786E1292BBDEC007EF260 /* DatePickerViewController.swift in Sources */,