Skip to content

[Feat] #89 - 보관함 비즈니스 로직 및 셀 바인딩 오류 수정#94

Merged
L-j-h-c merged 20 commits intoTeamRecorDream:developfrom
L-j-h-c:feature/#89-StorageBusinessLogic
Jan 7, 2023
Merged

[Feat] #89 - 보관함 비즈니스 로직 및 셀 바인딩 오류 수정#94
L-j-h-c merged 20 commits intoTeamRecorDream:developfrom
L-j-h-c:feature/#89-StorageBusinessLogic

Conversation

@L-j-h-c
Copy link
Copy Markdown
Contributor

@L-j-h-c L-j-h-c commented Jan 4, 2023

👻 작업한 내용

🎤 Fix

  1. RDSegmenteControl의 인덱스 에러를 수정했습니다. fec85ba
  2. 에러를 처리할 수 있도록 서버통신 비즈니스 로직을 수정했습니다. a547f2c
  3. 헤더의 잘못된 타입캐스팅과 CompositionalLayout을 수정했습니다. 46d5388
  4. dataSoruce에서 index마다 적합한 데이터를 바인딩 할 수 있도록 수정했습니다. 기존에 Itemidentifier를 RecordList로 타입캐스팅 하고 있는 부분에서 에러가 나고 있었습니다.
  5. GenreStackView의 인덱스 에러를 수정했습니다. a587fd3

🍒 Cherry Pick

이미지 어셋 추가 관련 부분 Cherry Pick 했습니다.

🗳️ Feat

CompositionalLayout 분기처리

처음에는 두 개의 layout을 작성한 다음, 필터 버튼이 눌리면 컬렉션뷰의 레이아웃을 직접 참조해서 할당하려 했습니다.
여기에 추가로 layoutSubviews에서 InvalidateLayout을 통해 할당된 레이아웃을 해제하고 재적용하려 했는데, UI가 많이 부자연스럽게 전환되었습니다.

찾아보니(자료) diffable Data Source를 사용하면 applySnapshot을 하는 시점에서 dataSource가 적용됨과 동시에 collectionViewLayout이 다시 반영된다고 합니다. 따라서 레이아웃은 처음 한 번만 생성하고, VC 내부의 currentLayoutType에 의존하여 내부에서 분기처리하도록 했습니다.

보기 형식 전환 시 셀 레이아웃 재적용

53a0ab4

DiffableDatasource의 경우 UI를 업데이트하기 위해서는 Hashable에 의해 새로운 데이터라고 판단되어야만 applySnapshot 시에 적용됩니다. 따라서 layoutChangeHalder를 entity 내부에 선언했고, reapply시에 toggle하여 적용했습니다.

또한 레이아웃 변동 시에 init 시점이 아니라 dequeReusable에서 이미 생성된 셀을 사용하기 때문에 setConstraints를 외부에서 호출하는 방식으로 수정했습니다.

5c96acb

재사용 시에 레이아웃을 삭제하기 위해 removeFromSuperView를 하는 부분을 추가했습니다.

남은 부분

  1. 엠티뷰를 collectionView의 BackGround에 할당하기 때문에 스크롤 시 어색하게 보입니다. 이 부분 cell에 분기처리하는 방법으로 해결해야 할 듯 합니다.
  2. 검색 및 마이페이지로 화면전환 하는 부분 구현해야합니다.
  3. 현재 셀의 레이아웃이 조금 부정확합니다. stackView를 통해 라벨들의 center를 잡아줘야 할 듯 합니다.
  4. 셀 내부 라벨의 길이가 길 경우
  5. segmented control의 UI
  6. 기획 요구사항 : 홈 및 기록하기 -> 보관함으로 돌아갔을 경우 보기 방식 초기화
  7. 감정-전체 이미지가 Selected밖에 없음. 디자인에 요청 필요.

📸 영상

KakaoTalk_Video_2023-01-04-16-02-12.mp4

📮 관련 이슈

L-j-h-c and others added 19 commits January 4, 2023 00:25
@L-j-h-c L-j-h-c added 록시보이 🌽 담당자 feat 구현·개선 사항에 관련된 내용입니다. fix 버그를 수정합니다. labels Jan 4, 2023
@L-j-h-c L-j-h-c self-assigned this Jan 4, 2023
@Suyeon9911
Copy link
Copy Markdown
Member

Suyeon9911 commented Jan 6, 2023

남은 부분 1번에 살짝 코멘트를 달자면, 제가 저번에 은희님한테 CollectionView Cell 분기처리 대신 다른방법 사용하는게 좋을 것 같다고 얘기했었거든요 ! 서버통신 후에 데이터가 비어있으면 아예 CollectionView를 addSubView 하지 않고 EmptyView를 add하는 방식으로 얘기했었는데 어떤가요 ?? 그러면 스크롤도 안되고 더 자연스러울거 같은뎁 !

Copy link
Copy Markdown
Member

@Suyeon9911 Suyeon9911 left a comment

Choose a reason for hiding this comment

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

수고하셨습니다....!!!!! Rx 활용을 되게 잘하시네요 !! 이 PR은 은희님의 어푸룹을 위해 저는 코멘트만 남기겠숩니다 ~~

Comment on lines 30 to +33
observer.onNext(entity)
}, onError: { err in
observer.onError(err)
}, onError: { _ in
observer.onNext(nil)
observer.onCompleted()
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍🏻

Comment on lines 60 to 66
}


override func prepareForReuse() {
self.genreStackView.arrangedSubviews.forEach { $0.removeFromSuperview() }
}

// MARK: - Functions
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

genreStackView 이외에 다른 요소들은 따로 처리 안해줘도 괜찮은가요??!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

레이아웃 부분은 setupConstraint에서 처리해주고 있고, setData에서 바뀌어야 하는 모든 값들을 초기화하고 있어서 괜찮습니다!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@L-j-h-c 아하 그렇군요 !! 굿굿

@Suyeon9911
Copy link
Copy Markdown
Member

한가지 궁금한점이 그러면 레이아웃이 바뀔때마다 snapshot도 재적용 되는건가요 ??

@L-j-h-c
Copy link
Copy Markdown
Contributor Author

L-j-h-c commented Jan 6, 2023

@Suyeon9911 엠티뷰에 대한 의견 제안 감사합니다! 현재 구조로는 emotion 부분이 컬렉션뷰 내부에 존재하고, 이 부분은 레코드가 있든 없든 나타나야 해서 컬렉션뷰를 아예 addsubView하지 않으면 안될 것 같아요..!

레이아웃에 대한 부분은, 정확히 말해서 snapshot이 바뀔 때마다 레이아웃을 다시 그리게 됩니다. 거기에 대해 유추할 수 있는 포인트는 동일한 서로 다른 컬렉션뷰 레이아웃을 할당하는 것이 아니라, 컬렉션뷰 레이아웃을 두고 지역 변수를 통해 분기처리를 한 상황이라는 것입니다. snapshot에 변동이 있을 시 해당 시점에 동일한 레이아웃 객체를 참조하여 레이아웃을 다시 그리는거라고 생각할 수 있죠!

만약 collectionView.collectionViewLayout을 재할당하는 경우를 말씀하신 거라면, 그 부분에 대해서는 snapshot이 바뀌기보다는 이미 존재하는 snapshot으로 새로운 레이아웃을 그렸다고 생각해야겠죠?

@Suyeon9911
Copy link
Copy Markdown
Member

Suyeon9911 commented Jan 6, 2023

@L-j-h-c

A1 : 아하 위의 emotion이 아예 컬렉션뷰 내부에 있는 구조로 되어있군요 !!! 제가 예전에 적용했던 구조랑은 달라서 그부분은 적용이 어려울 것 같네요 !! 확인 했습니다 ~~

A2 : 저는 처음에 레이아웃이 바뀔때마다 snapshot이 바뀌는 줄 알고 비효율적이지 않나 생각했는데, snapshot이 바뀌면 그에 맞는 레이아웃 객체를 참조해서 그려주는 것이군요 !! 이해했습니다 감사합니다 ~~

Copy link
Copy Markdown
Member

@EunHee-Jeong EunHee-Jeong left a comment

Choose a reason for hiding this comment

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

CompositionalLayout 분기처리 & 보기 형식 전환 시 셀 레이아웃 재적용

→ 이 부분 너무 어려웠는데 깔끔한 해결 감사합니당…

DiffableDatasource에서 스냅샷을 찍는 전후와 모델이 되는 데이터의 변화를 잘 뜯어봐야겠네요…!

한 가지 질문이 있는데 53a0ab4 커밋 내에 달아놓았습니다 !!

Copy link
Copy Markdown
Member

@EunHee-Jeong EunHee-Jeong left a comment

Choose a reason for hiding this comment

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

컨플릭트 부분이 코드 한줄이길래 제가 해결했습니다~~! (해당 브랜치 부분으로 바꿈)


1번)
image

2번)
image

@L-j-h-c L-j-h-c merged commit e494eca into TeamRecorDream:develop Jan 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat 구현·개선 사항에 관련된 내용입니다. fix 버그를 수정합니다. 록시보이 🌽 담당자

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 보관함 뷰 비즈니스 로직 구현

3 participants