본문 바로가기

iOS 개발/번역기 앱(RxSwift)

번역기 앱 - 2. 기본 구현

반응형

안녕하세요. Skillist입니다

 

글 작성중에, 창밖을 보니, 눈이 오고 있네요.

연휴의 눈이라 그런지, 느긋하게 창밖을 구경하니 마음이 편안해지네요. 

그럼 힘내서 개발을 시작해볼까요!

 

시작하는 단계이니, SceneDelegate와 TabBar Controller을 구현해볼게요.

 

———————————————————————————————————————————————————

 

프로젝트를 생성해줍니다.

저는 임시 프로젝트를 생성하며 설명할게요.

 

제가 사용중인 Xcode는 13.2.1이에요.

Product Name, Interface, Language를 설정합니다.

 

 

 

 

 

우선, Main.storyboard 관련 설정들은 모두 삭제해줍니다.

Target에서 Main Interface를 삭제해줍니다.

 

Main.storyboard는 삭제합니다. Move to Trash!

 

그리고 Info.plist에서 Storyboard Name을 삭제합니다.

 

이제 Main.storyboard 관련 설정이 완료됐습니다!!!

 

———————————————————————————————————————————————————

 

SceneDelegate를 설정합니다.

 

window와 rootViewController을 설정합니다.

rootViewController은 제가 구현한 RootTabController입니다.

 

———————————————————————————————————————————————————

 

RootTabController을 보죠.

 

11라인 : viewDidLoad에서 레이아웃과 탭바 설정을 합니다.

21라인 : 레이아웃은 구현할게 별로 없습니다. 배경 색상만 설정합니다.

 

24라인 : 탭 구현입니다.

26~34라인 : 번역 VC View에 대한 설정입니다.

26라인 : 번역 view 입니다.

27라인 : 번역 view에 viewModel 바인딩합니다.

29라인 : 컨트롤러와 TabBarItem 설정입니다. NavigationBar를 사용하기 위해, UINavigationController을 사용합니다.

 

37~45라인 : 기록 VC View에 대한 설정입니다.

내용은 번역 VC View 설정과 동일합니다.

 

48~56라인 : 보관함 VC View에 대한 설정입니다.

내용은 번역 VC View 설정과 동일합니다.

 

58라인 : viewController 설정입니다. 이를 통해 TabController에 VC를 추가합니다.

 

———————————————————————————————————————————————————

 

오늘은 본격적인 개발을 위한 워밍업을 해봤습니다.

제 프로젝트 글을 보신분이라면, 아주 익숙한 코드들이에요.

 

다음 글 부터 RxSwift 관련 코드 설명이 시작될텐데, 제가 잘 설명할 수 있을지 모르겠네요.

고생하셨어요~

 

잘못되거나 부족한 내용 등, 피드백 감사합니다!

 

https://github.com/DeveloperSkillist/TranstorKing

 

GitHub - DeveloperSkillist/TranstorKing

Contribute to DeveloperSkillist/TranstorKing development by creating an account on GitHub.

github.com

 

 

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  전체 코드  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = RootTabController()
        window?.makeKeyAndVisible()
    }
}
import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = RootTabController()
        window?.makeKeyAndVisible()
    }
}
import UIKit

class RootTabController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()

        layout()
        setupTabBars()
    }
}

private extension RootTabController {
    func layout() {
        view.backgroundColor = .systemBackground
    }

    func setupTabBars() {
        //번역VC View
        let translatorView = TranslatorView()
        translatorView.bind(TranslatorViewModel())  //ViewModel 바인딩
        
        let translatorViewController = UINavigationController(rootViewController: translatorView)
        translatorViewController.tabBarItem = UITabBarItem(
            title: "translator_title".localize,
            image: UIImage(systemName: "doc.plaintext"),
            selectedImage: UIImage(systemName: "doc.plaintext.fill")
        )

        //기록VC View
        let historyView = HistoryView()
        historyView.bind(HistoryViewModel())  //ViewModel 바인딩
        
        let historyViewController = UINavigationController(rootViewController: historyView)
        historyViewController.tabBarItem = UITabBarItem(
            title: "history_title".localize,
            image: UIImage(systemName: "clock"),
            selectedImage: UIImage(systemName: "clock.fill")
        )

        //보관함VC View
        let bookmarkView = BookMarkView()
        bookmarkView.bind(BookMarkViewModel())  //ViewModel 바인딩
        
        let bookmarkViewController = UINavigationController(rootViewController: bookmarkView)
        bookmarkViewController.tabBarItem = UITabBarItem(
            title: "bookmark_title".localize,
            image: UIImage(systemName: "square.and.arrow.down"),
            selectedImage: UIImage(systemName: "square.and.arrow.down.fill")
        )

        viewControllers = [
            translatorViewController,
            historyViewController,
            bookmarkViewController
        ]
    }
}
반응형