Skip to content

Conversation

@lsj8706
Copy link
Collaborator

@lsj8706 lsj8706 commented Jan 5, 2023

🌱 작업한 내용

  • 보관함 뷰에 필요한 ViewPager(PagingView) 구현
  • ViewPager의 Indicator Bar에 애니메이션 부여
  • CourseListCVC 구현
  • emptyView를 콤포넌트로 구현

🌱 PR Point

  • 보관함처럼 생긴 뷰를 다른 앱을 사용하면서 많이 보셨을 거 같아요! 이번에 구현 했으니 궁금하면 제가 쓴 코드를 잘 읽어보세요~!
  • 엠티 뷰를 콤포넌트로 따로 빼서 구현하였고 엠티 뷰의 터치 액션을 받아오기 위해 Protocol-delegate 패턴을 사용했습니다. 컴바인으로도 가능하지만 여러분들이 더 친숙하고 훨씬 중요한 것이 Protocol-delegate 패턴이기 때문에 잘 공부하고 넘어가는 것이 좋아요~!

CourseListCVC를 구현하였습니다

  • 해당 Cell은 다른 뷰에서도 계속 중복적으로 사용되고 있습니다! 하트 버튼의 유무라던지 조금씩 다르지만 이번에 싹 묶어서 구현을 했기 때문에 Cell의 Type만 지정하면 자동으로 UI가 바뀌도록 했습니다. 아래 코드를 주석 중심으로 봐주세요!
  • CourseListCVC의 Type
@frozen
enum CourseListCVCType {
    case title   // 이미지 + 제목
    case titleWithLocation // 이미지 + 제목 + 위치라벨
    case all // 이미지 + 제목 + 위치라벨 + 하트 버튼

   // cell 높이 계산의 편의성을 위해 type과 넓이를 입력하면 높이를 리턴하는 함수를 만들었습니다.
    static func getCellHeight(type: CourseListCVCType, cellWidth: CGFloat) -> CGFloat {
            let imageHeight = cellWidth * (124/174)
            switch type {
            case .title:
                return imageHeight + 24
            case .titleWithLocation, .all:
                return imageHeight + 40
            }
        }
}
  • CollectionView에서의 사용법
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CourseListCVC.className,
                                                        for: indexPath)
            as? CourseListCVC else { return UICollectionViewCell() }
    cell.setCellType(type: .all)   // 이렇게 cell의 타입을 지정 (하트 버튼까지 필요한 상황이었기에 .all로 지정)
    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let cellWidth = (UIScreen.main.bounds.width - (self.itemSpacing + 2*self.collectionViewInset.left)) / 2
    let cellHeight = CourseListCVCType.getCellHeight(type: .all, cellWidth: cellWidth) // 이렇게 cell 타입과 넓이를 넣으면 적절한 높이를 쉽게 구할 수 있습니다. (기기 크기에 맞는 높이값)
    
    return CGSize(width: cellWidth, height: cellHeight)
}

📸 스크린샷

구현 내용 스크린샷
보관함 뷰 Simulator Screen Recording - iPhone 14 - 2023-01-06 at 02 39 36
보관함 뷰 with EmptyView Simulator Screen Recording - iPhone 14 - 2023-01-06 at 02 41 21

📮 관련 이슈

@lsj8706 lsj8706 added Feat 새로운 기능 구현 세진☃️ labels Jan 5, 2023
@lsj8706 lsj8706 self-assigned this Jan 5, 2023
Copy link
Contributor

@dlwogus0128 dlwogus0128 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드가 너무 어려워요... 리뷰가 어려워요.. 리드 멋지다!!!!!!!!!

private let courseImageView = UIImageView().then {
$0.backgroundColor = .g3
$0.contentMode = .scaleToFill
$0.layer.cornerRadius = 5
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.scaleToFill을 하면 모가 다른가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// MARK: - Methods

public func moveToPage(at index: Int) {
self.collectionView.scrollToItem(at: IndexPath(item: index, section: 0), at: .centeredHorizontally, animated: true)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이게 내가 그린 코스 / 스크랩 코스 전환하는 부분인가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

맞습니다..! 상단의 버튼을 클릭했을 때 내가 그린 코스/ 스크랩 코스가 자연스럽게 스크롤하면서 전환되도록 했습니다!

@lee-yeonwoo lee-yeonwoo merged commit deeece2 into Runnect:develop Jan 6, 2023
@lsj8706 lsj8706 deleted the feat/#43-CourseStorageVC-UI branch January 6, 2023 04:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feat 새로운 기능 구현 세진☃️

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[Feat] CourseStorageVC 구현

3 participants