[240116] Today I Learned

YoungHyun Kim·2024년 1월 16일
1

TIL ✍️

목록 보기
37/68

내일배움캠프 앱개발 숙련 프로젝트

Super8oard

1. TabBarController

TabBarController에 Tab을 하나씩 추가, 각 Tab들은 하나씩의 뷰 혹은 네비게이션 컨트롤러에 접근할 수 있음!

class TabBarController: UITabBarController, UITabBarControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.delegate = self
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.tabBar.backgroundColor = .lightGray
        
        let mapTab = MapViewController() // mapTab의 RootViewController = MapViewController라는 뜻...
        let mapTabItem = UITabBarItem(title: "지도", image: nil, tag: 0)
        mapTab.tabBarItem = mapTabItem // mapTab객체의 tabBarItem 속성에다가 mapTabItem을 넣어버린 것!
        
        let registerTab = RegisterViewController()
        let registerTabItem = UITabBarItem(title: "킥보드 등록", image: nil, tag: 1)
        registerTab.tabBarItem = registerTabItem
        
        let myPageTab = MyPageViewController()
        let myPageTabItem = UITabBarItem(title: "My Page", image: nil, tag: 2)
        myPageTab.tabBarItem = myPageTabItem
        
        self.viewControllers = [mapTab, registerTab, myPageTab]
    }
}
  1. TabBarController 클래스를 하나 선언해주고, 이 안에서 사용하고 싶은 탭의 갯수만큼 탭 객체를 만들어 준다.
  2. tabBarItem을 만들 때 탭에 표시될 이미지를 넣을 수 있는데, 지금은 마땅한 아이콘 에셋을 구하지 않아서 nil로 두었지만 에셋이 있는 경우에는 넣어주면 좋다.

2. MapViewController

import UIKit
import NMapsMap

class MapViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let mapView = NMFNaverMapView(frame: view.frame)
        view.addSubview(mapView)
        
//NMFMapView에서 사용 가능한 메서드
//        mapView.setLayerGroup(NMF_LAYER_GROUP_BICYCLE, isEnabled: true)
        
//NMFNaverMapView에서 사용 가능한 속성
        mapView.showZoomControls = true
        mapView.showLocationButton = true
        mapView.showCompass = true
        
        mapView.positionMode = .compass
        
        // 좌표 랜덤 생성
        // 마커 생성
        // 마커 터치 시 나오는 모달 창 만들기 (킥보드 정보, 대여하기 버튼)
    }

}
  1. 지도 뷰 객체를 선언할 때 frame: view.frame으로 선언해줬는데, 자동으로 TabBar의 윗 모서리 부분까지 해서 layout이 잡히는 것 같다. 왜냐면 NMFNaverMapView의 좌측 하단에는 Naver 로고가 위치하는데 이게 TabBar에 가리지 않고 좌측 하단 TabBar 위에 있었기 때문...
  2. 저는 코드로 UI의 위치를 처음 잡아보는 것이기 때문에... 익숙하지 않습니다.
  3. 어떤 뷰를 addSubView할 때, Navigation, TabBar는 자동적으로 침범당하지 않게 되는 것... 인가 봅니다. 실험을 하나 해보겠습니다.
    • MapView를 하나의 NavigationController에 embeded 시킨 후, TabBarController로 접근해보면 궁금증이 해결될 것 같습니다.
profile
iOS 개발자가 되고 싶어요

0개의 댓글