헬스장 멤버 체크인 앱을 제작하던 도중, 화면전환을 해야 할 일이 있었다. 나는 그동안 segue(Viewcontroller간 상호연결) 와 navigation(embed In) 기능만 있으면 스토리보드에서 전환하는 방식 이외 따로 별도의 코드를 실행시킬 필요가 없을 줄 알았는데 그게아니였다.
회원의 Dictionary Key 값에 맞춰 로그인을 시키는 if문을 작성하던 도중 위 두가지 방식으로는 문제를 해결할 수 없다는 것을 알고 난 후, 화면전환을 코드로 실행하는 방법을 알아둬야하는구나 하고 느꼈고 그 개념에 대한 100% 이해가 선행되어야만 뭐든 할 수 있겠구나 해서 이 글을 작성해본다.
// 1. 이동할 뷰 컨트롤러 객체를 StoryBoardID 정보를 이용하여 참조.
let uvc = self.storyboard?.instantiateViewController(withIdentifier: "secondVC")
인자값으로 입력된 storyboard ID와 일치하는 뷰 컨트롤러를 찾아 인스턴스를 생성하고 이 값을 받아온다.
// 2. 화면 전환할 때의 애니메이션 타입
uvc?.modalTransitionStyle = UIModalTransitionStyle.coverVertical
이 단계에서 UIModalTransitionStyle의 메서드를 coverVertical을 사용했지만,
이를 다른방식으로 바꿔주면 어떨까? 대표적으로 총 3가지 방식이 있다.
// 3. 인자값으로 뷰 컨트롤러 인스턴스를 넣고 프레젠트 메소드 호출
self.present(uvc!, animated: true)
최종적으로 화면 전환을 처리하는 부분. 이 메소드는 모두 두 개의 인자값을 필요로 함.
첫번째 인자값, 우리는 이미 instantiateViewController(withIdentifier:) 메소드를 통해 인스턴스를 만들어 uvc 상수에 저장해 주었고 이를 인자값으로 넘겨주면 됨.
두번째 인자값, 애니메이션을 사용 할 것인지 말것인지 여부를 Bool 타입으로 입력해주면 된다. 만약, true로 입력해준다면 2단계에서 지정한 애니메이션 타입이 실행 될 것이다!