Chilli-Saewoo / Roll-in

Apple Developer Acadmey @ POSTECH Macro Project
3 stars 0 forks source link

[feature]: QR코드를 등록하는 뷰를 제작합니다. #15

Closed feldblume5263 closed 1 year ago

feldblume5263 commented 1 year ago

Feature 설명

QR코드를 등록하는 뷰를 제작합니다. UI는 다음과 같습니다.

image

Related View(Optional)

뒤로가기 버튼을 눌렀을 때, 모든 firebase안에 있는 해당 User가 삭제되고, userDefault가 초기화 되어야 합니다. (다시 만들어져야 하기 때문)

예상 작업 기간

2시간

feldblume5263 commented 1 year ago

VC 분기처리를 한 방식에 대해서 설명하려고 합니다.

VC 분기처리를 하는 이유를 먼저 설명하면, 유저가 맨 처음 화면을 켰을 때, 로그인을 한 상태라면 바로 롤링페이퍼 화면으로 이동시키고, 로그인을 한 적이 없는 상태라면, 유저를 만드는 화면으로 이동시키기 위함입니다.

먼저 저는 두 경우 다 특정한 네비게이션 컨트롤러로 이동시키려고 합니다. 단순히 VC로도 이동시킬 수 있지만, 일단 저희는 화면 이동이 있는 어플이기 때문에 네비게이션 컨트롤러를 그대로 사용하고 싶어서 네비게이션 컨트롤러로 이동시켰습니다.

전체적인 스토리 보드 플로우는 다음과 같습니다. image

코드에서 보실 부분은 SceneDelegate 부분인데, 들어오는 화면을 구성하는 부분이기 때문입니다. 코드 설명은 밑에서 드릴게요.

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let scene = (scene as? UIWindowScene) else { return }
        self.window = UIWindow(windowScene: scene)
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        if UserDefaults.userId == nil {

            let vc = storyboard.instantiateViewController(withIdentifier: "CreateUserNVC") as! UINavigationController
            self.window?.rootViewController = vc
            self.window?.makeKeyAndVisible()

        } else {

            let vc = storyboard.instantiateViewController(withIdentifier: "MainNVC") as! UINavigationController
            self.window?.rootViewController = vc
            self.window?.makeKeyAndVisible()

        }
    }

여기서 중요하게 보실 부분은 UserDefaults에서 userId가 분기가 되는 부분인데요. userId가 설정되지 않은 상태라면, 로그인이 안된 상태이기 때문에, CreateUserNVC라는 NavigationController로 보내주고 userId가 있으면, MainNVC라는 NavigationController로 보내주게 됩니다.