-
Notifications
You must be signed in to change notification settings - Fork 5
여행 목록 화면 레이아웃 버튼 애니메이션 적용 버그
songju edited this page Nov 30, 2020
·
3 revisions
- 앱 최초 실행 후 좌측 상단의 버튼으로 레이아웃을 변경했을 때, snapshot apply의 애니메이션이 적용되지 않음
- 첫 화면에서 보이던 두 셀을 제외한 나머지 셀들의 애니메이션이 적용되지 않는 것을 보면, 데이터가 셀에 처음으로 로드될 때 애니메이션이 적용되지 않는 것일까?
- 우선 snapshot apply는 datasource를 새로 configure하지는 않는다.. 따라서 새로 여행이 추가되거나 삭제됐을 경우 헤더의 여행 숫자를 바꿀 수 없었다.
- 애니메이션을 포기하고 reloadData를 하기엔 너무 아쉽고 그렇다고 기능을 포기할 수는 없었기에 기존 코드를 아래 처럼 작성했었다.
func applySnapShot(with travels: [TravelItemViewModel]) {
var snapShot = SnapShot()
...
dataSource.apply(snapShot, animatingDifferences: true) {
self.travelListColletionView.reloadData()
}
}
- 그러다 보니 중첩이 되었는지(?) apply가 진행되는 중간에 reload가 되는 문제였다... (completion 내부였는데.....😦 학습이 필요하다)
- 우선, 여행 목록 뷰모델이 바뀌는 순간마다 applySnapshot을 해주는데 스냅샷을 찍기 전에 reload를 먼저 해주면 어떨까 싶어서 위의 apply 메소드의 completion을 삭제하고 따로 reloadData를 해주었다.
var travelListViewModel: TravelListPresentable? {
didSet {
travelListViewModel?.didFetch = { [weak self] fetchedTravels in
self?.travelListCollectionView.reloadData()
self?.applySnapShot(with: fetchedTravels)
}
}
}
해결!!
- 섹션 헤더만 업데이트 해주면 되는데 데이터 전체를 reload해주는 것이 비효율적이라고 생각이 들었고 조금 더 좋은 방법이 있는지 찾아보고 개선해야한다...
컬렉션뷰에 reloadSections 라는 메소드도 있지만 알 수 없는 에러가 발생해서 적용시킬 수 없었다 😓
S035 유시형 @sihyungyou | S039 이승진 @devilzcough | S054 조송주 @songjucho
🤝 규칙
📱 개발 진행 상황
🧐 학습
- 고민거리
- 읽을거리
- TDD
- CoreData 학습내용
- CoreData에 TDD 적용하기
- 테스트 가능한 네트워크모델
- CI 입문기
- DiffableDataSource 적용해보기
- 테스트코드 커버리지 측정하기
- 비동기처리에 대한 유닛테스트
- 앱 배포하기
- TableView에 Pull to Refresh 적용하기
- Floating Action Button 직접 만들어보기
- Core Animation-PieChart 구현하기
- Core Animation-LaunchScreen 구현하기
- UIView.animate에 대한 테스트 작성해보기
- 유닛테스트의 한계와 통합테스트의 필요성