iOS 화면 전환 방식 : Presentation
안녕하세요!
오늘은 iOS에서 화면 전환을 구현하는 방식 중 Presentation 방식에 대해 알아보도록 하겠습니다😊
📑참고 글
[Apple Developer Document] present 메서드
[Apple Developer Document] dismiss 메서드
Presentation방식은 소스코드로 구현하는 방법인데요,
전환할 다음 화면의 뷰 컨트롤러 인스턴스를 present
메서드로 호출해서 전환하고,
dismiss
메서드로 자신의 뷰 컨트롤러를 걷어내는 방식입니다.
present(_:animated:completion:)
먼저 present
메서드에 대해 먼저 알아보도록 하겠습니다.
present(_:animated:completion:)
func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil)
UIViewController 클래스에 정의되어 있는 인스턴스 메서드로,
매개변수로 전달 받은 ViewController를 modal하게 띄어줍니다. (디폴트 스타일은 UIModalTransitionStyle.coverVertical로, 화면이 아래에서 위로 올라오는 스타일입니다.)
현재 화면에서 present메서드를 호출하면, 파라미터로 받은 뷰 컨트롤러의 화면을 현재 화면 위에 띄웁니다. (메서드 말 그대로, view를 present합니다)
메서드의 파라미터는 3가지가 있습니다.
viewControllerToPresent: UIViewController
현재 뷰 컨트롤러 위에 뛰울 뷰 컨트롤러 입니다. 즉, 전환할 화면의 뷰컨트롤러가 되겠습니다!
flag: Bool
presentation에 애니메이션 효과를 주려면 true를, 아니면 false를 전달합니다.
completion: (() -> Void)? = nil
presentation(화면전환)이 끝나고 해야할 작업을 전달합니다. 없으면 nil을 쓰면 됩니다.
참조 관계
presentation방식에선 present하는 뷰 컨트롤러와 present되는 뷰 컨트롤러사이에 참조 관계가 형성됩니다.
presentation방식에서 화면을 전환하는 주체는 현재 뷰의 뷰 컨트롤러(VC1)입니다.
따라서 VC1의 presentedViewController
프로퍼티는 VC2를 참조하게 되고,
VC2의 presentingViewController
프로퍼티는 VC1을 참조합니다.
dismiss(animated:completion:)
present메서드로 전환한 화면에서 기존 화면으로 돌아가기 위해선 dismiss
메서드를 사용합니다.
dismiss(animated:completion:)
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
dismiss
메서드에선 전환할 화면의 인스턴스를 전달 받지 않아도 됩니다.
이 메서드를 호출하면, 호출하는 뷰 컨트롤러의 화면이 걷혀지기 때문입니다.
나머지 메서드의 파라미터는 present
메서드와 동일합니다.
flag: Bool
presentation에 애니메이션 효과를 주려면 true를, 아니면 false를 전달합니다.
completion: (() -> Void)? = nil
presentation(화면전환)이 끝나고 해야할 작업을 전달합니다. 없으면 nil을 쓰면 됩니다.
코드에서 사용 하기
그럼 이번엔 VC1 화면
에서 -> VC2 화면
으로 전환하는 과정을 코드로 살펴보겠습니다.
1. 새로운 화면(VC2)의 뷰 컨트롤러를 인스턴스화
let vc2 = storyboard?.instantiateViewController(withIdentifier: "SecondVC") as! ViewController
기존 화면(VC1)의 뷰 컨트롤러에서 새로운 화면(VC2)의 뷰 컨트롤러의 인스턴스를 생성해줍니다.
withIdentifier
에는 VC2의 Storyboard ID를 넣어줍니다. Storyboard ID는 스토리보드 아이덴티티 인스펙터 탭에서 확인하면 됩니다!
instantiateViewController
는 UIViewController타입의 인스턴스를 반환하기 때문에 VC2의 뷰 컨트롤러 클래스 타입으로 다운 캐스팅해줍니다.
2. 화면 전환 스타일 정의
vc2.modalTransitionStyle = UIModalTransitionStyle
vc2의 modalTransitionStyle
프로퍼티에 화면 전환 스타일을 정해줍니다.
UIModalTransitionStyle
열거형의 타입 중 선택하면 됩니다.
UIModalTransitionStyle
case coverVertical //default
case flipHorizontal
case crossDissolve
case partialCurl
3. present
로 화면 전환
VC1에서 vc2
를 present
하면 VC1 화면이 VC2 화면으로 덮여지게 됩니다.
present(vc2, animated: true: completion: nil)
4. dismiss
로 화면 전환 되돌리기
VC2에서 VC1으로 돌아가려면, VC2에서 dismiss
메서드를 호출하면 됩니다!
dismiss(animated: true: completion: nil)
이렇게 present와 dismiss로 화면을 전환하는 방식에 대해 공부해보았습니다.
질문이나 잘못된 내용에 대한 답변은 언제나 환영입니다! 🤓
(잘 보셨다면 좋아요 꾸욱~도 언제나 환영입니다😺)
Author And Source
이 문제에 관하여(iOS 화면 전환 방식 : Presentation), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeahg_dev/iOS-화면-전환-방식-Presentation저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)