[iOS] 화면 전환

Jamong·2023년 1월 24일
0

iOS 알아가기

목록 보기
8/14

[패스트캠퍼스] 30개 프로젝트로 배우는 iOS 앱 개발 with Swift 초격차 패키지 Online을 학습하면서 나오는 이론 내용과 공식 문서에서 필요한 내용을 발췌하여 정리한 글입니다.

Part2. Basic 2. LED 전광판 앱 만들기

화면 전환

화면 전환을 위한 방법으로는 크게 두가지가 있다.

  • 소스코드를 통해 전환하는 방식
  • Stroyboard를 통해 전환하는 방식

나머지 작게는 4가지가 있다.

  • View Controller의 View 위에 다른 View를 가져와 바꿔치기
  • View Controller에서 다른 View Controller를 호출하여 전환하기
  • Navigation Controller를 사용하여 화면 전환하기
  • 화면 전환용 객체 세그웨이를 사용하여 화면 전환하기

여기서 첫번째 방법은 되도록 사용하지 말아야하는 방법이다. 왜냐하면 View 위에 View를 가져오게 되면 메모리 누수 위험이 존재하기 때문이다.

View Controller에서 다른 View Controller 호출하여 전환하기

현재 뷰 컨트롤러에서 이동할 대상의 뷰 컨트롤러를 직접 호출해서 화면에 표시하는 방법이다.
(직접 표시한다는 의미로 Presentation 방식이라고도 부름)

기존 뷰 컨트롤러 위에 새로운 뷰 컨트롤러 화면을 덮는 방식이다.

// present 메소드에 이동할 화면의 뷰 컨트롤러 넘겨줌
func present(_ viewControllerToPresent: UIViewControoler,
	animated flag: Bool,
    completion: (() -> Void)? = nil)

present 메소드에 첫번째 파라미터에는 새로운 화면으로 이동할 화면의 뷰 컨트롤러 인스턴스를 넣어주고, 두번째 파라미터에는 화면을 전환할 때 애니메이션 효과를 줄 것인지 안 줄 것인지 Bool 값으로 넣어준다.
세번째 파라미터에는 completion이라는 클로저값을 받고 있는데 completion 파라미터에 클로저를 정의해주면 화면전환이 완료되는 시점에 맞춰 completion 클로저가 호출되게 된다.

화면전환 방식은 비동기 방식으로 처리되기 때문에 화면전환이 완료된 이후에 코드로 처리해야할 로직이 있다면 completion 클로저안에 로직을 작성하면 된다.

이전화면으로 돌아오기

func dismiss(animated flag: Bool,
	completion: (() -> Void)? = nil)

이전 화면으로 돌아가는 메소드로 뷰 컨트롤러 인스턴스를 인자로 받지 않는다.
dismiss 메소드의 첫번째 파라미터에는 애니메이션을 적용할지 말지 Bool값으로 받고, 두번째 파라미터에는 이전화면으로 돌아가는게 완료된 이후에 코드로 처리해야할 로직을 작성한다.

네비게이션 컨트롤러는 계층적인 성격을 띄는 컨텐츠 구조를 관리하기 위한 컨트롤러이다.

네비게이션 컨트롤러는 뷰 컨트롤러 전환을 직접 컨트롤하고 앱의 네비게이션 정보를 표시하는 역활을 할 뿐만아니라 네비게이션 스택으로 자식 뷰 컨트롤러를 관리한다.

네비게이션 스택은 선입 후출 방식으로 나중에 들어온 화면이 먼저 나가는 방식이기 때문에 pushViewController 메소드를 사용해서 네비게이션 스택에 화면을 추가하고 popViewController 메소드를 사용해서 네비게이션 스택에 있는 화면을 제거한다.

화면 추가

func pushViewController(_ viewController: UIViewController,
	anmiated: Bool)

첫번째 파라미터: 새로운 화면으로 이동할 ViewController의 인스턴스를 넘겨준다.
두번째 파라미터: 화면전환 될때 애니메이션 사용할지 말지 Bool값을 넘겨준다.

화면 제거

func popViewController(animated: Bool) -> UIViewController?

첫번째 파라미터: 이전화면으로 전환될때 애니메이션 사용할지 말지 Bool값을 넘겨준다.

화면 전환용 객체 세그웨이를 사용하여 화면 전환하기

세그웨이에는 두개의 뷰 컨트롤러 사이에 연결된 화면전환 객체를 의미한다.

Stroyboard를 통해 출발지와 목적지를 직접 지정하는 방식을 세그웨이를 이용한 화면 전환이라고 한다. 세그웨이를 이용하면 따로 코드를 사용하지 않고 Stroyboard만으로 화면을 전환할 수 있다.

세그웨이 종류에는 Action Segueway와 Manual Segueway가 있다.

출발점이 뷰 컨트롤러 자체인 경우를 Manual Segueway라하고 출발점이 버튼, 셀 등인 경우 Action Segueway(Trigger Segueway)라 한다.

Action Segueway

액션 세그웨이는 버튼 터치와 같은 트리거 이벤트가 세그웨이 실행으로 바로 연결된다.
그래서 소스코드를 추가하지 않아도 화면전환 기능을 구현하지 않을 수 있다.

Action Segueway 종류

  • show : 가장 일반적인 세그웨이로 네비게이션 컨트롤러를 사용하면 화면 전환시 뷰 컨트롤러가 네비게이션에 쌓이게 되고 만약 네비게이션 컨트롤러를 사용하지 않을 경우에는 뷰 컨트롤러가 삭제된다.
  • show Detail : Split View에서 사용하는 세그웨이로 아이폰에서 사용하게 되면 show segueway랑 똑같이 동작하지만 아이패드에서 사용하게되면 스플릿 구조의 마스터 슬레이브구조가 되어서 보이게 된다.
  • present Modally : 이전 뷰 컨트롤러를 덮으면서 새로운 화면이 나타나게 된다.
  • Present As Popover : 아이패드에서 사용하는 것으로 팝업창을 띄울때 사용한다. (아이폰 사용 x)
  • custom : 세그웨이를 사용자가 원하는 방식으로 커스텀할때 사용한다.

Manual Segueway

적절한 시점에 perform Seguewy를 호출하면서 세그웨이가 실행되어 화면전환이 일어난다.

profile
새해 목표 : 1일 1 깃, 블로그, 프로그래머스 2문제

0개의 댓글