TMDB API๋ฅผ ์ด์ฉํด์ ์ํ ์์๋ฅผ ํ์ธํ๊ณ ์์ธํ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ ์ฑ์ ๋๋ค.
- Pagination์ผ๋ก ์ํ์ ์์๋ฅผ ํ ํ๋ฉด์์ ์คํฌ๋กค์ ํตํ์ฌ ์์ฝ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
- CollectionView๋ฅผ ์ฌ์ฉํ์ฌ TOP 5 ์ํ์ ๋น์ทํ ์ฅ๋ฅด์ ์ปจํ ์ธ ๋ฅผ ์ถ์ฒ๋ฐ์ ์ ์์ต๋๋ค.
- WebKit์ ์ฌ์ฉํ์ฌ ๋งํฌ ๋ฒํผ ์ ๊ฐ ์ํ์ ์๋์์ค๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค.
- CustomCell์ ์ฌ์ฌ์ฉ ํ์ฌ ์ํ์ ์์ธํ ์ ๋ณด(์ํ ์ค๋ช , ์ถ์ฐ์ง, ์คํญ ๋ฑ)์ ํ์ธํ ์ ์์ต๋๋ค.
- MapKit์ ์ฌ์ฉํ์ฌ ์ถ์ฒ ์ํ๊ด์ MapView๋ก ํ์ธํด๋ณผ ์ ์์ต๋๋ค.
Swift
,UIKit
,Storyboard
,MVC
,MapKit
,CLLocation
,WebKit
Alamofire
,SwiftyJSON
,Kingfisher
- ๊ฐ๋ฐ ๊ธฐ๊ฐ: 2022๋ 8์ 3์ผ ~ 2022๋ 8์ 18์ผ (์ฝ 2์ฃผ)
- ์ธ๋ถ ๊ฐ๋ฐ ๊ธฐ๊ฐ
- 2022.08.03 ~ 2022.08.06: ๊ธฐ๋ณธ UI ๋ฐ ๊ธฐ๋ฅ ๊ตฌํ (์ํ๋ณ ์์, ์์ธ ํ์ด์ง ๋ฑ)
- 2022.08.07 ~ 2022.08.18: ๊ทธ ์ธ ๊ธฐ๋ฅ ๊ตฌํ (์ํ ์ถ์ฒ, ์ํ๊ด ์ถ์ฒ ๋ฑ)
- Storyboard๋ฅผ ์ฌ์ฉํ์ฌ UI ๊ตฌํ
- Alamofire๋ฅผ ํ์ฉํ API ํต์
- WebKit์ ํ์ฉํ ์นํ์ด์ง ์ด๋ ๋ฐ ๊ธฐ๋ณธ ๋ฉ์๋ ๊ตฌํ.
- ์์น ๊ถํ ์ค์ ๋ฐ ๋์
-
100๊ฐ๊ฐ ๋๋ ์ํ ๋ฐ์ดํฐ๋ฅผ CollectionView Cell์ ๋ฃ์ด์ผ ํ๋ ์ด์
โ Pagenation์ผ๋ก ๋ฐฐ์ด์ ์ผ์ ์์ ๋ง๋ค ํต์ ํ์ฌ ๋ฐ์ดํฐ ์ถ๊ฐ
static var searchList: [TrendListModel] = []
extension ListViewController: UICollectionViewDataSourcePrefetching {
func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
for indexPath in indexPaths {
if ListViewController.searchList.count - 5 == indexPath.item && ListViewController.searchList.count < totalCount {
startPage += 1
requestTMDBTrend(media_type: mediaType, time_window: timeWindow, page: startPage)
}
}
}
}
-
๋น์ทํ ์ปจํ ์ธ ์ ๊ฐ์์ ๋ฐ๋ผ ์ ์ ๊ฐ์๊ฐ ๋ฐ๋์ด์ผ ํ๋ ์ด์
โ TableViewCell ๋ด CollectionView๋ฅผ ๋ฃ๊ณ CollectionView์๊ฒ ๊ฐ์ ์ ๋ฌํ์ฌ ํด๊ฒฐ
class RecommandTableViewCell: UITableViewCell {
@IBOutlet weak var recommandCollectionView: UICollectionView!
@IBOutlet weak var titleLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
setupUI()
}
func setupUI() {
titleLabel.font = UIFont(name: "Binggrae-Bold", size: 17)
titleLabel.text = ""
recommandCollectionView.backgroundColor = .clear
recommandCollectionView.collectionViewLayout = collectionViewLayout()
}
func collectionViewLayout() -> UICollectionViewFlowLayout {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.itemSize = CGSize(width: 100, height: 150)
layout.minimumLineSpacing = 16
layout.minimumInteritemSpacing = 16
layout.sectionInset = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 0)
return layout
}
}
- UserDefaults๋ฅผ ์ฌ์ฉํ ๋ Key๊ฐ์ ํด๋นํ๋ String์ ์ฌ์ฉํ ๋ ๋ง๋ค raw๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ์๋ค. ํ์ง๋ง ์ถํ ๋ฆฌํฉํ ๋ง ์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ , ๊ฐ๋ฐ์์ ์ค์๋ก ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ์๊ฐํ๋ค. ์ถํ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ raw๊ฐ์ ์ฝ๊ฒ ๊ด๋ฆฌํด์ผ ํจ์ ๋๊ผ๊ณ , ์ดํ ๋ฐ๊ธฐ๋ค ํ๋ก์ ํธ์์ ์ด๊ฑฐํ์ผ๋ก raw๊ฐ๋ค์ ๊ด๋ฆฌํ์ฌ ์ถํ ์ ์งโข๋ณด์์๋ ๋น์ฉ์ด ์ ๊ฒ ๋ค๋๋ก ์ค๊ณํ๋ค.
- ํ์ฌ ํ๋ก์ ํธ์์ ๋ค์ด๋ฐ์ ๋ดค์ ๋ ๋ฉ์๋๋ ํด๋์ค๊ฐ ์ด๋ค ์ญํ ์ ํ๊ณ ์๋์ง ์ ํํ๊ฒ ์๊ธฐ ์ด๋ ต๋ค๊ณ ์๊ฐํ๋ค. ์ถํ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค๊ณผ ํ์ ์ ๋๋นํ์ฌ ๋ค์ด๋ฐ์ ๋ ์ง๊ด์ ์ด๊ณ ํ ๋ฒ์ ์ดํดํ ์ ์๊ฒ ์์ฑํด์ผ ํ๋ค๋ ๊ฒ์ ๋๊ผ๋ค.
- API ํต์ ์ Error์ ๋ํ ๋์์ด ๋ฏธ์ํ๋ค๋ ๊ฒ์ ๋๊ผ๋ค. ๋ง์ฝ ์ฌ์ฉ์๊ฐ API ํต์ ์ ์คํจํ๋ ์ํฉ์ด ๋ฐ์ํ์ ๋, ์ฌ์ฉ์๊ฐ ์ด๋ค ์ํฉ์ด ๋ฐ์ํ๋์ง ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๋ค. ๋ฐ๋ผ์ ์ถํ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ Error์ ๊ดํ ๋์์ ํ์์ฑ์ ๋๊ผ๊ณ , ์ดํ ์์น ์คํฐ๋ ํ๋ก์ ํธ์์ ๊ฐ ๋คํธ์ํฌ ํต์ ์ ๋ฐ์ํ ์ ์๋ Error๋ฅผ ๋์ํ๋ค.