Skip to content

Commit 8c8a6c5

Browse files
committed
feat: #271 홈 정보표시 설정 및 출처표시
1 parent 61a91a3 commit 8c8a6c5

File tree

6 files changed

+99
-4
lines changed

6 files changed

+99
-4
lines changed

BBus/BBus.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
4AA294B3273C111C008E5497 /* GetFavoriteItemListFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA294B2273C111C008E5497 /* GetFavoriteItemListFetcher.swift */; };
6363
4AA294B5273C11DE008E5497 /* CreateFavoriteItemFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA294B4273C11DE008E5497 /* CreateFavoriteItemFetcher.swift */; };
6464
4AA294B7273C1275008E5497 /* DeleteFavoriteItemFetchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA294B6273C1275008E5497 /* DeleteFavoriteItemFetchable.swift */; };
65+
4AC79161274F6FDB00019827 /* SourceFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC79160274F6FDB00019827 /* SourceFooterView.swift */; };
6566
4ACA51E3272FCD9600EC0531 /* HomeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA51E2272FCD9600EC0531 /* HomeModel.swift */; };
6667
4ACA51E5272FCD9C00EC0531 /* HomeUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA51E4272FCD9C00EC0531 /* HomeUseCase.swift */; };
6768
4ACA51E7272FCDA600EC0531 /* HomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA51E6272FCDA600EC0531 /* HomeViewModel.swift */; };
@@ -194,6 +195,7 @@
194195
4AA294B2273C111C008E5497 /* GetFavoriteItemListFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetFavoriteItemListFetcher.swift; sourceTree = "<group>"; };
195196
4AA294B4273C11DE008E5497 /* CreateFavoriteItemFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateFavoriteItemFetcher.swift; sourceTree = "<group>"; };
196197
4AA294B6273C1275008E5497 /* DeleteFavoriteItemFetchable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteFavoriteItemFetchable.swift; sourceTree = "<group>"; };
198+
4AC79160274F6FDB00019827 /* SourceFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SourceFooterView.swift; sourceTree = "<group>"; };
197199
4ACA51E2272FCD9600EC0531 /* HomeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeModel.swift; sourceTree = "<group>"; };
198200
4ACA51E4272FCD9C00EC0531 /* HomeUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeUseCase.swift; sourceTree = "<group>"; };
199201
4ACA51E6272FCDA600EC0531 /* HomeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewModel.swift; sourceTree = "<group>"; };
@@ -437,6 +439,7 @@
437439
4A1A22DA27326FD100476861 /* HomeNavigationView.swift */,
438440
4A7BBFF02737D6C20029915F /* RemainCongestionBadgeLabel.swift */,
439441
4A917DF127462E36002489FE /* EmptyFavoriteNoticeView.swift */,
442+
4AC79160274F6FDB00019827 /* SourceFooterView.swift */,
440443
);
441444
path = View;
442445
sourceTree = "<group>";
@@ -959,6 +962,7 @@
959962
4A06AEC8274159D10027222D /* FavoriteItemDTO.swift in Sources */,
960963
4ACA521F272FCEAA00EC0531 /* AlarmSettingBusArriveInfo.swift in Sources */,
961964
4A1A22DB27326FD100476861 /* HomeNavigationView.swift in Sources */,
965+
4AC79161274F6FDB00019827 /* SourceFooterView.swift in Sources */,
962966
0484107627464D49006F8636 /* AlarmSettingBusArriveInfos.swift in Sources */,
963967
4ACA5225272FCEBF00EC0531 /* AlarmSettingView.swift in Sources */,
964968
87038A92273C12320078EAE3 /* GetBusPosByRtidFetcher.swift in Sources */,

BBus/BBus/Foreground/Home/HomeViewController.swift

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ final class HomeViewController: UIViewController {
8484

8585
NSLayoutConstraint.activate([
8686
self.homeView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
87-
self.homeView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),
87+
self.homeView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
8888
self.homeView.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
8989
self.homeView.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor)
9090
])
@@ -222,7 +222,38 @@ extension HomeViewController: UICollectionViewDataSource {
222222
}
223223

224224
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
225-
guard let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: FavoriteCollectionHeaderView.identifier, for: indexPath) as? FavoriteCollectionHeaderView else { return UICollectionReusableView() }
225+
switch kind {
226+
case UICollectionView.elementKindSectionFooter :
227+
if let footer = footer(with: collectionView, indexPath: indexPath) {
228+
return footer
229+
}
230+
case UICollectionView.elementKindSectionHeader :
231+
if let header = header(with: collectionView, indexPath: indexPath) {
232+
return header
233+
}
234+
default :
235+
return UICollectionReusableView()
236+
}
237+
return UICollectionReusableView()
238+
}
239+
240+
private func footer(with collectionView: UICollectionView, indexPath: IndexPath) -> SourceFooterView? {
241+
guard let footer = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: SourceFooterView.identifier, for: indexPath) as? SourceFooterView else { return nil }
242+
if let maxSize = self.footerSize(with: collectionView) {
243+
footer.frame.size = maxSize
244+
}
245+
return footer
246+
}
247+
248+
private func footerSize(with collectionView: UICollectionView) -> CGSize? {
249+
guard collectionView.contentSize.height < collectionView.frame.height else { return nil }
250+
let gap = collectionView.frame.height - collectionView.contentSize.height
251+
return CGSize(width: self.view.frame.width, height: SourceFooterView.height + gap)
252+
}
253+
254+
private func header(with collectionView: UICollectionView, indexPath: IndexPath) -> FavoriteCollectionHeaderView? {
255+
guard let header = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: FavoriteCollectionHeaderView.identifier, for: indexPath) as? FavoriteCollectionHeaderView else { return nil }
256+
226257
guard let stationId = self.viewModel?.homeFavoriteList?[indexPath.section]?.stationId,
227258
let stationName = self.viewModel?.stationName(by: stationId),
228259
let arsId = self.viewModel?.homeFavoriteList?[indexPath.section]?.arsId else { return header }
@@ -248,6 +279,11 @@ extension HomeViewController: UICollectionViewDelegateFlowLayout {
248279
return CGSize(width: self.view.frame.width, height: FavoriteCollectionHeaderView.height)
249280
}
250281
}
282+
283+
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
284+
guard section == (self.viewModel?.homeFavoriteList?.count() ?? 1) - 1 else { return CGSize.zero }
285+
return CGSize(width: self.view.frame.width, height: SourceFooterView.height)
286+
}
251287
}
252288

253289
// MARK: - HomeSearchButtonDelegate : UICollectionView

BBus/BBus/Foreground/Home/View/EmptyFavoriteNoticeView.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ final class EmptyFavoriteNoticeView: UIView {
2424
label.font = UIFont.systemFont(ofSize: 15)
2525
return label
2626
}()
27+
private lazy var sourceLabel: UILabel = {
28+
let label = UILabel()
29+
label.text = "출처 : 서울특별시"
30+
label.font = UIFont.systemFont(ofSize: 15)
31+
label.textColor = BBusColor.bbusGray
32+
return label
33+
}()
2734

2835
convenience init() {
2936
self.init(frame: CGRect())
@@ -43,7 +50,7 @@ final class EmptyFavoriteNoticeView: UIView {
4350
let half: CGFloat = 0.5
4451
let centerYInterval: CGFloat = -30
4552

46-
self.addSubviews(self.noticeImage, self.noticeLabel)
53+
self.addSubviews(self.noticeImage, self.noticeLabel, self.sourceLabel)
4754

4855
NSLayoutConstraint.activate([
4956
self.noticeImage.centerXAnchor.constraint(equalTo: self.centerXAnchor),
@@ -57,5 +64,11 @@ final class EmptyFavoriteNoticeView: UIView {
5764
self.noticeLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
5865
self.noticeLabel.widthAnchor.constraint(equalTo: self.noticeImage.widthAnchor, multiplier: 1.2)
5966
])
67+
68+
let sourceLabelBottominterval: CGFloat = -30
69+
NSLayoutConstraint.activate([
70+
self.sourceLabel.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: sourceLabelBottominterval),
71+
self.sourceLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor)
72+
])
6073
}
6174
}

BBus/BBus/Foreground/Home/View/FavoriteCollectionViewCell.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class FavoriteCollectionViewCell: UICollectionViewCell {
3030

3131
private lazy var busNumberLabel: UILabel = {
3232
let label = UILabel()
33-
label.text = "272"
3433
label.font = UIFont.boldSystemFont(ofSize: self.busNumberFontSize)
3534
label.textColor = BBusColor.bbusTypeBlue
3635
return label

BBus/BBus/Foreground/Home/View/HomeView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ final class HomeView: UIView {
1212
private lazy var favoriteCollectionView: UICollectionView = {
1313
let collectionView = UICollectionView(frame: CGRect(), collectionViewLayout: self.collectionViewLayout())
1414
collectionView.register(FavoriteCollectionHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: FavoriteCollectionHeaderView.identifier)
15+
collectionView.register(SourceFooterView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: SourceFooterView.identifier)
1516
collectionView.register(FavoriteCollectionViewCell.self, forCellWithReuseIdentifier: FavoriteCollectionViewCell.identifier)
1617
let backgroundView = UIView()
1718
backgroundView.backgroundColor = BBusColor.bbusBackground
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//
2+
// CollectionReusableView.swift
3+
// BBus
4+
//
5+
// Created by 이지수 on 2021/11/25.
6+
//
7+
8+
import UIKit
9+
10+
final class SourceFooterView: UICollectionReusableView {
11+
12+
static let identifier = "SourceFooterView"
13+
static let height: CGFloat = 100
14+
15+
private lazy var sourceLabel: UILabel = {
16+
let label = UILabel()
17+
label.text = "출처 : 서울특별시"
18+
label.font = UIFont.systemFont(ofSize: 15)
19+
label.textColor = BBusColor.bbusGray
20+
return label
21+
}()
22+
23+
required override init(frame: CGRect) {
24+
super.init(frame: frame)
25+
self.configureLayout()
26+
}
27+
28+
required init?(coder: NSCoder) {
29+
super.init(coder: coder)
30+
self.configureLayout()
31+
}
32+
33+
private func configureLayout() {
34+
self.addSubviews(self.sourceLabel)
35+
36+
let half: CGFloat = 0.5
37+
NSLayoutConstraint.activate([
38+
self.sourceLabel.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -Self.height * half),
39+
self.sourceLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor)
40+
])
41+
}
42+
}

0 commit comments

Comments
 (0)