sookim-1

번호 : 010, 작성일자: 2024-04-08

2024.04.01 ~ 2024.04.07

📱 UITabBar, UITabBarController


사이드프로젝트를 시작하면서 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이벤트를 적용해보았다.

💬 FirebaseLearnProject 채팅기능 구현


FirebaseAuth와 FireStore를 사용하여 채팅을 구현해보았다. 해당 프로젝트는 여러명이 같은 채팅방도 이용할 수 있는 상황을 고려했다. FirebaseLearnProject의 프로젝트에서 구현해보았다.

FireStore DB구조는 FirebaseAuth를 활용하여 각 사용자별 Uid로 구분하고 채팅방을 매칭시키는 구조다.

채팅관련 코드들은 MVVM구조다.

FireStore 마지막 채팅내역이 아닌 경우까지 첫 화면은 로딩을 표시하는 방법을 해결하지 못했다.

🙋🏻‍♂️ 기타 사항


  1. 사이드프로젝트를 위해 애니메이션 목록 관련 API를 찾아보았는데 MyAnimeList API가 유명했고 해당 API를 Copy한 Jikan API가 있었는데 개발하는 시점에 Jikan을 사용하고 완료되면 MyAnimeList로 변경하는 방법을 고려해봐야겠다. 2가지 비교를 위해 Postman에 각 WorkSpace를 생성하여 정리했다.
  2. 네이버지도 iOS SDK를 사용하면 처음 화면에서 NaverMapView가 로드될때 NMFMapViewCameraDelegate 메서드가 호출된다. 첫 로드시 호출을 방지하고 싶은 경우 RxGesture를 활용하여 view가 gesture를 받기 전까지 NMFMapViewCameraDelegate의 메서드 이벤트를 모두 skip한 후 gesture를 받은 후부터 처리하도록 할 수 있다.
  3. 티스토리에 Xcode Preview관련 글을 작성했다.
태그: