From 7104ce2bd5c69c6b3a929fcf98c7c945579d418a Mon Sep 17 00:00:00 2001 From: Mindohyeon Date: Mon, 19 Jun 2023 12:02:06 +0900 Subject: [PATCH 1/4] =?UTF-8?q?Add=20banner=20=EC=9E=90=EB=8F=99=20swipe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HomeFeature/Sources/Cell/MoviesCell.swift | 1 - .../Sources/HomeViewController.swift | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Projects/Feature/HomeFeature/Sources/Cell/MoviesCell.swift b/Projects/Feature/HomeFeature/Sources/Cell/MoviesCell.swift index 795a8eb..130d150 100644 --- a/Projects/Feature/HomeFeature/Sources/Cell/MoviesCell.swift +++ b/Projects/Feature/HomeFeature/Sources/Cell/MoviesCell.swift @@ -16,7 +16,6 @@ class MoviesCell: UICollectionViewCell { self.addSubview(moviesImageView) moviesImageView.snp.makeConstraints { $0.edges.equalToSuperview() - } } diff --git a/Projects/Feature/HomeFeature/Sources/HomeViewController.swift b/Projects/Feature/HomeFeature/Sources/HomeViewController.swift index b7afd7f..adcd240 100644 --- a/Projects/Feature/HomeFeature/Sources/HomeViewController.swift +++ b/Projects/Feature/HomeFeature/Sources/HomeViewController.swift @@ -9,9 +9,9 @@ import DesignSystem var bannerImageSources = [ DesignSystemAsset.Images.testImage.image, + DesignSystemAsset.Images.inputPhoto.image, DesignSystemAsset.Images.testImage.image, - DesignSystemAsset.Images.testImage.image, - DesignSystemAsset.Images.testImage.image + DesignSystemAsset.Images.inputPhoto.image ] var segConArray = ["최근", "추천", "인기"] @@ -27,7 +27,7 @@ class HomeViewController: BaseVC { flowLayout.minimumLineSpacing = 9 let view = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) view.register(MoviesCell.self, forCellWithReuseIdentifier: MoviesCell.identifier) - + return view }() @@ -116,13 +116,24 @@ class HomeViewController: BaseVC { } ) switch owner.segCon.selectedSegmentIndex { - + default: return } }.disposed(by: disposeBag) } + private func bannerMovetimer() { + Observable.interval(.seconds(4), scheduler: MainScheduler.instance) + .bind(with: self) { owner, remainingSeconds in + if owner.pageControl.currentPage == 3 { + owner.pageControl.currentPage = 0 + } else { + owner.pageControl.currentPage += 1 + } + }.disposed(by: disposeBag) + } + override func viewWillLayoutSubviews() { removeBackgroundAndDidiver() } @@ -132,6 +143,7 @@ class HomeViewController: BaseVC { navigationItem.title = "hihi" setGesture() bindUI() + bannerMovetimer() let width = segCon.bounds.size.width / CGFloat(segCon.numberOfSegments) let height: CGFloat = 2.0 @@ -145,7 +157,7 @@ class HomeViewController: BaseVC { override func addView() { view.addSubviews(bannerImageView, pageControl, segCon, moviesCollectionView) } - + override func setLayout() { bannerImageView.snp.makeConstraints { $0.top.equalTo(view.safeAreaLayoutGuide).inset(21) From facdc3f60c8fc990d1d2b9e4f20940f305ff774e Mon Sep 17 00:00:00 2001 From: Mindohyeon Date: Mon, 19 Jun 2023 13:33:52 +0900 Subject: [PATCH 2/4] Add viewAllButton --- .../testImage2.imageset/Contents.json | 12 +++ .../testImage2.imageset/SP_1920774 3.svg | 9 +++ .../Sources/HomeViewController.swift | 76 ++++++++++++------- 3 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 Projects/Core/DesignSystem/Resources/Images.xcassets/testImage2.imageset/Contents.json create mode 100644 Projects/Core/DesignSystem/Resources/Images.xcassets/testImage2.imageset/SP_1920774 3.svg diff --git a/Projects/Core/DesignSystem/Resources/Images.xcassets/testImage2.imageset/Contents.json b/Projects/Core/DesignSystem/Resources/Images.xcassets/testImage2.imageset/Contents.json new file mode 100644 index 0000000..23436c9 --- /dev/null +++ b/Projects/Core/DesignSystem/Resources/Images.xcassets/testImage2.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "SP_1920774 3.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Core/DesignSystem/Resources/Images.xcassets/testImage2.imageset/SP_1920774 3.svg b/Projects/Core/DesignSystem/Resources/Images.xcassets/testImage2.imageset/SP_1920774 3.svg new file mode 100644 index 0000000..4761cd7 --- /dev/null +++ b/Projects/Core/DesignSystem/Resources/Images.xcassets/testImage2.imageset/SP_1920774 3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Projects/Feature/HomeFeature/Sources/HomeViewController.swift b/Projects/Feature/HomeFeature/Sources/HomeViewController.swift index adcd240..71547bc 100644 --- a/Projects/Feature/HomeFeature/Sources/HomeViewController.swift +++ b/Projects/Feature/HomeFeature/Sources/HomeViewController.swift @@ -8,10 +8,10 @@ import RxGesture import DesignSystem var bannerImageSources = [ + DesignSystemAsset.Images.testImage2.image, DesignSystemAsset.Images.testImage.image, - DesignSystemAsset.Images.inputPhoto.image, - DesignSystemAsset.Images.testImage.image, - DesignSystemAsset.Images.inputPhoto.image + DesignSystemAsset.Images.testImage2.image, + DesignSystemAsset.Images.testImage2.image ] var segConArray = ["최근", "추천", "인기"] @@ -51,6 +51,11 @@ class HomeViewController: BaseVC { $0.layer.cornerRadius = 10 } + private let viewAllButton = UIButton().then { + $0.titleLabel?.font = DesignSystemFontFamily.Suit.regular.font(size: 10) + $0.setTitle("전체 보기 >", for: .normal) + } + private let segCon = UISegmentedControl(items: segConArray).then { $0.clipsToBounds = false $0.selectedSegmentIndex = 0 @@ -87,24 +92,18 @@ class HomeViewController: BaseVC { default: break } - - UIView.transition( - with: owner.bannerImageView, - duration: 0.3, - options: .transitionCrossDissolve, - animations: { - owner.bannerImageView.image = bannerImageSources[owner.pageControl.currentPage] - }) + owner.bannerAnimation() }.disposed(by: disposeBag) } func bindUI() { moviesData .asDriver() - .drive(moviesCollectionView.rx.items(cellIdentifier: MoviesCell.identifier, - cellType: MoviesCell.self)) { (row, data, cell) in - cell.prepare(model: data) - }.disposed(by: disposeBag) + .drive(moviesCollectionView.rx.items( + cellIdentifier: MoviesCell.identifier, + cellType: MoviesCell.self)) { (row, data, cell) in + cell.prepare(model: data) + }.disposed(by: disposeBag) segCon.rx.selectedSegmentIndex.changed .bind(with: self) { owner, _ in @@ -115,22 +114,37 @@ class HomeViewController: BaseVC { self.underlineView.frame.origin.x = underlineFinalXPosition } ) - switch owner.segCon.selectedSegmentIndex { - - default: - return - } }.disposed(by: disposeBag) } + func bannerAnimation() { + UIView.transition( + with: bannerImageView, + duration: 0.3, + options: .transitionCrossDissolve, + animations: { + self.bannerImageView.image = bannerImageSources[self.pageControl.currentPage] + }, + completion: { _ in + self.startAnimation() + }) + } + + private func startAnimation() { + DispatchQueue.main.asyncAfter(deadline: .now() + 4) { + if self.pageControl.currentPage == 3 { + self.pageControl.currentPage = 0 + } else { + self.pageControl.currentPage += 1 + } + self.bannerAnimation() + } + } + private func bannerMovetimer() { Observable.interval(.seconds(4), scheduler: MainScheduler.instance) .bind(with: self) { owner, remainingSeconds in - if owner.pageControl.currentPage == 3 { - owner.pageControl.currentPage = 0 - } else { - owner.pageControl.currentPage += 1 - } + owner.bannerAnimation() }.disposed(by: disposeBag) } @@ -140,7 +154,6 @@ class HomeViewController: BaseVC { override func configureVC() { navigationController?.navigationBar.prefersLargeTitles = false - navigationItem.title = "hihi" setGesture() bindUI() bannerMovetimer() @@ -155,7 +168,11 @@ class HomeViewController: BaseVC { } override func addView() { - view.addSubviews(bannerImageView, pageControl, segCon, moviesCollectionView) + view.addSubviews( + bannerImageView, pageControl, + segCon, moviesCollectionView, + viewAllButton + ) } override func setLayout() { @@ -176,6 +193,11 @@ class HomeViewController: BaseVC { $0.height.equalTo(23) } + viewAllButton.snp.makeConstraints { + $0.top.equalTo(bannerImageView.snp.bottom).offset(50) + $0.trailing.equalToSuperview().inset(15) + } + moviesCollectionView.snp.makeConstraints { $0.top.equalTo(segCon.snp.bottom).offset(10) $0.leading.equalToSuperview().inset(15) From 9be374c66c622e858853f6b15c3993f6e71b8336 Mon Sep 17 00:00:00 2001 From: Mindohyeon Date: Mon, 19 Jun 2023 13:54:39 +0900 Subject: [PATCH 3/4] =?UTF-8?q?Error=20=EB=B3=80=EA=B2=BD=EB=90=A0=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=EA=B0=80=20=EB=8B=A4=EB=A5=B4?= =?UTF-8?q?=EB=A9=B4=20=EB=84=98=EC=96=B4=EA=B0=80=EC=A7=80=EC=95=8A?= =?UTF-8?q?=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/HomeViewController.swift | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Projects/Feature/HomeFeature/Sources/HomeViewController.swift b/Projects/Feature/HomeFeature/Sources/HomeViewController.swift index 71547bc..e2abed0 100644 --- a/Projects/Feature/HomeFeature/Sources/HomeViewController.swift +++ b/Projects/Feature/HomeFeature/Sources/HomeViewController.swift @@ -8,9 +8,9 @@ import RxGesture import DesignSystem var bannerImageSources = [ - DesignSystemAsset.Images.testImage2.image, DesignSystemAsset.Images.testImage.image, - DesignSystemAsset.Images.testImage2.image, + DesignSystemAsset.Images.testImage.image, + DesignSystemAsset.Images.testImage.image, DesignSystemAsset.Images.testImage2.image ] @@ -124,27 +124,22 @@ class HomeViewController: BaseVC { options: .transitionCrossDissolve, animations: { self.bannerImageView.image = bannerImageSources[self.pageControl.currentPage] - }, - completion: { _ in - self.startAnimation() }) } private func startAnimation() { - DispatchQueue.main.asyncAfter(deadline: .now() + 4) { - if self.pageControl.currentPage == 3 { - self.pageControl.currentPage = 0 - } else { - self.pageControl.currentPage += 1 - } - self.bannerAnimation() + if self.pageControl.currentPage == 3 { + self.pageControl.currentPage = 0 + } else { + self.pageControl.currentPage += 1 } + self.bannerAnimation() } private func bannerMovetimer() { Observable.interval(.seconds(4), scheduler: MainScheduler.instance) .bind(with: self) { owner, remainingSeconds in - owner.bannerAnimation() + owner.startAnimation() }.disposed(by: disposeBag) } @@ -194,7 +189,7 @@ class HomeViewController: BaseVC { } viewAllButton.snp.makeConstraints { - $0.top.equalTo(bannerImageView.snp.bottom).offset(50) + $0.centerY.equalTo(segCon) $0.trailing.equalToSuperview().inset(15) } From 82857bdba498678a4f93adc7d714ecef06384b06 Mon Sep 17 00:00:00 2001 From: Mindohyeon Date: Mon, 19 Jun 2023 14:04:15 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/HomeViewController.swift | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Projects/Feature/HomeFeature/Sources/HomeViewController.swift b/Projects/Feature/HomeFeature/Sources/HomeViewController.swift index e2abed0..f1d6bde 100644 --- a/Projects/Feature/HomeFeature/Sources/HomeViewController.swift +++ b/Projects/Feature/HomeFeature/Sources/HomeViewController.swift @@ -123,23 +123,20 @@ class HomeViewController: BaseVC { duration: 0.3, options: .transitionCrossDissolve, animations: { + print(self.pageControl.currentPage) self.bannerImageView.image = bannerImageSources[self.pageControl.currentPage] }) } - private func startAnimation() { - if self.pageControl.currentPage == 3 { - self.pageControl.currentPage = 0 - } else { - self.pageControl.currentPage += 1 - } - self.bannerAnimation() - } - private func bannerMovetimer() { Observable.interval(.seconds(4), scheduler: MainScheduler.instance) - .bind(with: self) { owner, remainingSeconds in - owner.startAnimation() + .bind(with: self) { owner, _ in + if owner.pageControl.currentPage == 3 { + owner.pageControl.currentPage = 0 + } else { + owner.pageControl.currentPage += 1 + } + owner.bannerAnimation() }.disposed(by: disposeBag) }