사이드프로젝트를 시작하면서 UITabBar를 활용하여 홈화면을 구성할 예정이여서 여러가지에 대해서 알아보았다.
1️⃣번째로는 UITabBar를 숨김처리하는 방법은 여러가지인데 한 곳에서 처리하도록 하는 방법을 사용해보았다.
기존에 숨김처리를 하기 위해서 숨김처리할 화면의 viewWillAppear가 호출될 때 tabbar.isHidden을 하거나 tabbar.frame을 조정하거나, push가 될때 hidesBottomBarWhenPushed프로퍼티를 활용했는데 매번 새로운화면이 추가될 때 확인을 해야하거나 헷갈릴 수 있기 때문에 한 곳에서 처리를 하도록 하면 관리와 협업을 하는 경우 헷갈리지 않을 수 있고 장점이 많은 것 같다.
2️⃣번째로는 TabBar의 Item을 선택한 경우 화면이 전환 될 때 애니메이션등을 처리해보았다. 기본적으로 애니메이션 스타일에 대해서는 각각 다를 수 있지만, 처리하는 부분은 모두 비슷한 것 같다. UITabBarControllerDelegate의 메서드인 tabBarController(_:animationControllerForTransitionFrom:to:)에서 UIViewControllerAnimatedTransitioning프로토콜을 채택하는 애니메이터객체를 반환하면 적용이 된다.
Slide형식과 확대,축소되는 형식 2가지 스타일을 적용해보고 비교해보았다.
3️⃣번째로는 CustomTabBar로 변경하였다. 기본 TabBar를 변경하는 경우 애니메이션 처리 부분, frame 조정등 제한이 있기 때문에 UIStackView를 활용하여 기본 TabBar를 대체하여 사용했다. 각각의 TabItem은 UIView로 적용했기 때문에 RxGesture를 도입하여 tap이벤트를 적용해보았다.
FirebaseAuth와 FireStore를 사용하여 채팅을 구현해보았다. 해당 프로젝트는 여러명이 같은 채팅방도 이용할 수 있는 상황을 고려했다. Firebase_Learn_Project의 프로젝트에서 구현해보았다.
FireStore DB구조는 FirebaseAuth를 활용하여 각 사용자별 Uid로 구분하고 채팅방을 매칭시키는 구조다.
채팅관련 코드들은 MVVM구조다.
FireStore 마지막 채팅내역이 아닌 경우까지 첫 화면은 로딩을 표시하는 방법을 해결하지 못했다.