Programming/iOS

[iOS/Swift3.0] Navigation Controller와 Modal에서의 화면 전환 차이

devssun 2018. 5. 22. 20:56
728x90
반응형
  1. Navigation interface 내비게이션 인터페이스는 주로 계층적 구조의 화면전환을 위해 사용되는 드릴 다운 인터페이스(drill-down interface)이다 드릴 다운 인터페이스는 각 선택할 수 있는 화면에 대한 세부 항목이 존재하는 인터페이스인데 설정 앱처럼 정보의 흐름을 가지고 있는 경우에 사용을 한다

    내비게이션 인터페이스는 내비게이션 컨트롤러를 통해 구현한다.

  2. Navigation Controller 내비게이션 컨트롤러는 컨테이너 뷰 컨트롤러(container view controller)로써 내비게이션 스택을 사용하여 다른 뷰 컨트롤러를 관리한다
    내비게이션 스택(Navigation Stack)은 뷰 컨트롤러를 담을 수 있는 배열과 같다
    스택의 가장 하위에는 Root View Controller가 존재하며 이것은 스택에서 pop되지 않는다.
    그 위에 View Controller가 push되며 마지막에 푸시된 뷰 컨트롤러가 최상위 뷰 컨트롤러로 화면에 보이게 된다.
    내비게이션 스택은 화면에서 push/pop을 통해 뷰 컨트롤러를 관리한다.
    • 새로운 뷰 컨트롤러가 push될 때 UIViewController 인스턴스가 생성되고 내비게이션 스택에 추가된다
    • pop하면 생성되었던 UIViewController의 인스턴스는 다른 곳에서 참조되고 있지 않는 경우 메모리에서 해제되고, 내비게이션 스택에서 삭제된다.

  3. Modal 모달(Modal)은 화면전환 기법 중 하나이다. 위에서 설명한 내비게이션 인터페이스처럼 화면 흐름이 있을 때 나타나는 것 보다는 화면을 다른 화면 위로 띄워 표현하는 방식이다.
    기존의 있는 흐름을 끊고 사용자에게 무언가를 입력 받게 하거나 알람 표시에 관한 화면을 표시하고 사용자가 특정 버튼을 눌러야 화면이 사라지게 된다.

    앱에서 로그인/회원가입 같은 기능에서 Modal을 사용하게 된다.

    뷰 컨트롤러를 화면상에 나타내는 방법은 1. 컨테이너뷰 컨트롤러에 임베드하거나, presentation을 통해서 나타낼 수 있다
    뷰 컨트롤러의 present 지원 기능은 UIViewController클래스에 내장되어 있으며 모든 뷰 컨트롤러 객체에서 사용할 수 있다
    func present(UIViewController, animated: Bool, completion: (() -> Void)? = nil)

    뷰 컨트롤러를 나타내면 아래 두 뷰 컨트롤러 간의 관계가 생성되고 presented view controller가 사라질 때(dismissed)까지 유지된다.

    • 나타내는 뷰 컨트롤러 (presenting view controller)
    • 나타나는 뷰 컨트롤러 (presented view controller)

    modalPresentationStyle 프로퍼티를 통해 뷰 컨트롤러가 화면에 나타나는 모양을 설정할 수 있다.

정리
Navigation interface와 Modal에서의 화면 전환 차이는 화면 흐름과 관련되는지/되지 않는 지에 큰 차이가 있다.
Navigation controller

  • 화면 표시 : push
  • 화면 제거 : pop

Modal

  • 화면 표시 : present
  • 화면 제거 : dismiss


반응형