-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
박스오피스II [STEP 2] Erick, kyungmin #105
base: ic_9_kyungmin
Are you sure you want to change the base?
Conversation
@@ -10,6 +10,7 @@ import UIKit | |||
final class BoxOfficeViewController: UIViewController { | |||
private let boxOfficeManager: BoxOfficeManager | |||
private var collectionView: UICollectionView! | |||
private var collectionViewMode: CollectionViewMode = .list |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주입을 받아보는건 어떨까요 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주입시켜줬습니다:)
@@ -117,32 +144,87 @@ extension BoxOfficeViewController { | |||
return | |||
} | |||
} | |||
|
|||
@objc private func didTapChangeViewModeButton() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM :)
collectionView.delegate = self | ||
} | ||
|
||
private func setupCollectionViewLayout() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인자로 안받고 이렇게 하신 이유가 있을까요 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
UICollectionViewDiffableDataSource
코드에서 분기처리를 한 것과 같이 collectionViewMode
프로퍼티를 이용하여 분기처리를 하려고 했었습니다!
UICollectionViewLayout
을 인자로 받으면 코드가 더욱 간단해지기 때문에 인자로 받도록 변경하였습니다!
var snapshot = NSDiffableDataSourceSnapshot<Section, DailyBoxOffice>() | ||
snapshot.appendSections([.main]) | ||
snapshot.appendItems(boxOfficeManager.dailyBoxOffices, toSection: .main) | ||
snapshot.reloadSections([.main]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
snapshot.reloadSections([.main])
이건 왜 필요한건가요 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reloadSections(_:)
은 snapshot
의 지정된 섹션 내에서 데이터를 다시 로드하는 메서드입니다.
reloadSections
를 하지 않으면 바뀐 데이터가 없어 apply
를 하여도 셀이 바뀌지 않기 때문에 reloadSections
로 main
섹션의 데이터를 리로드하여 새로운 셀이 사용될 수 있도록 하였습니다!
@@ -236,3 +332,11 @@ extension BoxOfficeViewController { | |||
case main | |||
} | |||
} | |||
|
|||
// MARK: CollectionView Mode | |||
extension BoxOfficeViewController { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주입을 받을게 아니라면, private이여도 될 것 같네요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주입을 받는 방식으로 바꿔줬기 때문에 private
은 해주지 않았습니다
|
||
let rankStateColor = dailyBoxOffice.rankStateColor | ||
|
||
rankChangeLabel.convertColor(target: rankStateColor.targetString, as: rankStateColor.color) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
컨벤션이 다른 메서드랑은 좀 다르네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
func setupLabels(_ dailyBoxOffice: DailyBoxOffice) {
let rankStateColor = dailyBoxOffice.rankStateColor
rankLabel.text = dailyBoxOffice.rank
rankChangeLabel.text = dailyBoxOffice.rankState
movieTitleLabel.text = dailyBoxOffice.movieTitle
audienceCountLabel.text = dailyBoxOffice.dailyAndTotalAudience
rankChangeLabel.convertColor(target: rankStateColor.targetString, as: rankStateColor.color)
}
다음과 같이 컨벤션 수정했습니다😆
} | ||
|
||
private func setupContentView() { | ||
contentView.layer.cornerRadius = 4 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
layer를 쓰셔서 질문드립니다.
MasksToBounds 는 뭘까요 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
masksToBounds
는 layer
의 Bool
프로퍼티입니다.
true
일때는 서브뷰들이 테두리를 기준으로 잘리게 되고, false
일때는 잘리지 않게 됩니다.
기본값이 false
이기 때문에 true
로 변경해줬습니다
@July911
안녕하세요 July!!
리뷰이 Erick🐶, Kyungmin🐼 입니다!
박스오피스II의 두번째 스탭입니다!
이번에도 많은 조언 부탁드립니다🙇
🤔 고민했던 점
1️⃣ 화면 모드 변경
alert
의 버튼을 눌렀을 때CollectionView
의layout
과cell
을 어떻게 바꿀지 고민했습니다.CollectionViewMode
라는 열거형을 만들어Controller
가 프로퍼티로 열거형 인스턴스를 들고 있고collectionViewMode
를 분기처리하여layout
과cell
을 결정하도록 설정했습니다.CollectionViewMode 코드
dataSource 코드
2️⃣ 모드 변경 애니메이션
처음에는 모드 변경을 할 때
collectionView.reloadData()
로 모든 셀을 다시 로드하였습니다. 하지만 이럴 경우 애니메이션 효과 없이 화면이 한번에 바뀌어 사용자 경험을 저하시킬 수 있기에setCollectionViewLayout
과reloadSections
을 사용하여layout
이 바뀌는 순간과section
이 리로드 되는 순간에 애니메이션 효과를 주었습니다.layout이 업데이트 될 때 애니메이션
reloadSections와 apply를 사용하여 section이 업데이트 될 때 애니메이션
3️⃣ dynamic하게 cell의 높이를 변경하기
처음
label
들의text
에만adjustsFontForContentSizeCategory
속성을true
로 변경해줬을때는collectionView
의cell
높이가dynamic
하게 변경되지 않았습니다.centerY
로 설정돼있던label
들의 제약을topAnchor
와bottomAnchor
를contentView
의topAnchor
와bottomAnchor
를 잇고,.estimated
를 활용해dynamic
하게cell
의 높이가 변경 되게 해줬습니다.🙇♂️ 조언을 얻고싶은 점
1️⃣ 영화 상세화면 dynamic type 적용
요구사항에서는
dynamic type
을 적용했을때 감독, 제작년도, 개봉일 등의titleLabel
이 크기가 커져서 모두 같은 크기를 갖는 것처럼 보였습니다.titleLabel
의Compression priority
를.required
로 설정하는 방법이 제일 바람직하다고 판단하여 적용했지만, 세로 줄이 요구사항과는 다르게 맞지 않았습니다.이를 해결하기 위해
titleLabe
l과 오른쪽 정보를 닮는label
을 각각 다른 세로 스택뷰에 따로 담아서 해결하려 했으나 오른쪽 정보를 닮는label
크기가 유동적이기때문에 이 방법으로도 해결하지 못했습니다.미리
titleLabel
의 크기를 고정시켜놓는 방법 이외에 이 문제를 어떻게 해결할 수 있을까요?📃 요구사항 화면
🔨 현재 구현된 화면
📚 참고 링크