인기 화폐 페이지로 이동할 때 왼쪽 상단에서 확장되는 애니메이션이 보인다
FavoritesContainerViewController (UIViewController)
│
├── topFavoritesView (TopFavoritesView)
│ ├── tabCollectionView (탭 버튼 2개: "인기 화폐", "관심 목록")
│ ├── underlineView (현재 선택된 탭 강조)
│ ├── searchButton (검색 버튼)
│ └── contentView (각 뷰 컨트롤러를 표시할 영역)
│
├── popularCurrencyVC (PopularCurrencyViewController)
│ └── 인기 화폐 리스트 뷰
│
└── favoriteListVC (FavoriteListViewController)
└── 관심 목록 리스트 뷰
이런 구조로 FavoritesContainerViewController에서 contentView 영역에 각 탭에 맞는 뷰컨트롤러를 띄우고 그 뷰컨트롤러가 상황에 맞는 뷰를 띄우는 형식이다.
private func switchToViewController(for segment: SegmentType) {
if segment == .popularCurrency {
remove(child: favoriteListVC)
add(child: popularCurrencyVC)
} else {
remove(child: popularCurrencyVC)
add(child: favoriteListVC)
}
}
private func add(child viewController: UIViewController) {
addChild(viewController)
topFavoritesView.contentView.addSubview(viewController.view)
viewController.view.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
viewController.didMove(toParent: self)
}
viewController.view.frame = topFavoritesView.contentView.bounds
topFavoritesView.contentView.addSubview(viewController.view)
viewController.view.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
addChild(viewController)
viewController.didMove(toParent: self)
해결 안됨 equalToSuperview()로 제약 조건 잡는 과정에서 애니메이션 생기는것 같음
뷰 추가 후 바로 layoutIfNeeded()을 호출하여 Auto layout을 즉시 완료 시키기
topFavoritesView.contentView.addSubview(viewController.view)
viewController.view.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
topFavoritesView.contentView.layoutIfNeeded() // 즉시 레이아웃 적용
addChild(viewController)
viewController.didMove(toParent: self)
인기 화폐 페이지로 넘어갈 때는 애니메이션이 사라짐, 커스텀 인디케이터 화면에서 제약 조건 잡는 화면에서도 같은 현상 보임
만약 UIView.performWithoutAnimation {}을 사용하면, 레이아웃 변경 시 애니메이션이 발생하지 않도록 할 수 있습니다.
UIView.performWithoutAnimation {
topFavoritesView.contentView.addSubview(viewController.view)
viewController.view.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
topFavoritesView.contentView.layoutIfNeeded()
}
addChild(viewController)
viewController.didMove(toParent: self)
해결 안됨, UIView.perfrmWithoutAnimation{}은 애니메이션이 적용되는 뷰 변경 사항을 막기 위한 코드, addSubview()는 기본적으로 애니메이션이 발생하지 않음
여기가 문제 원인이 아닌거 같다