앱 UI의 여러 인스턴스를 동시에 관리하고, 리소스를 적절한 UI 인스턴스로 전달합니다.
UIKit은 객체를 사용하여 앱 UI의 각 인스턴스를 관리!
Scene
은 UI의 한 인스턴스를 표시하기 위한 창
과 View Controller
가 포함!
각 장면에는 UIKit과 앱 간의 상호 작용을 조정하는 데 사용하는 해당 객체도 있습니다.
Scene은 서로 동시에 실행되어 동일한 메모리와 앱 프로세스 공간을 공유
합니다.
결과적으로 단일 앱에는 여러 장면과 장면 Delegate 객체가 동시에 활성화될 수 있습니다.
UIWindowScene
UIWindowSceneDelegate
아래와 같이 ViewController를 만들면
새로운 Scene를 추가 가능
![]() | ![]() |
iOS에서 화면 이동을 하는 역할
세그를 이용해서 부드럽게 화면 전환 가능
세그는 일방통행 골목 같음 → 한쪽으로만 이동 가능
→ 출발지는 뷰 컨트롤러가 될 수도 버튼이나 테이블 셀 등의 컨트롤이 될 수도
→ 사용자 이벤트를 전달받아서 화면 전환의 매개체 역할
→ 출발 지점에 따라 부르는 방식이 달라짐
control로 VC를 선택하여 생성 가능
enum UIModalPresentStyle: Int {
case automatic
// 시스템이 보여주는 방식을 정한다.
case fullScreen
// 스크린을 덮는 보여주는 방식
case pageSheet
// 기본 뷰를 일부분을 덮는 보여주는 방식
case formSheet
// 스크린의 중앙에 컨텐츠를 보여주는 방식
case currentContext
// 다른 뷰컨트롤러를 통해 내용을 보여주는 방식
case custom
// 사용자 정의 animator 객체로 부터 관리되는 보여주는 방식
case overFullScreen
// 스크린을 덮는 뷰를 보여주는 방식
case overCurrentContext
// 다른 뷰 컨트롤러의 컨텐츠를 통해 보여주는 방식
case blurOverFullScreen
// 새로 표현하는 뷰를 보여주기 전에 기존의 뷰를 흐릿하게 하며 보여주는 방식
case popover
// popover뷰로 보여주는 방식
case none
}
위와 같이 Segue를 만들고
Action에 이걸 넣어도 가능
performSegue(withIdentifier: "showSegue", sender: sender)
if let thirdView = self.storyboard?.instantiateViewController(identifier: "thirdView") {
present(thirdView, animated: true, completion: nil)
}
Unwind Segue는 View가 쌓여있을 때 지정한 곳으로 화면을 되돌리는 역할을 합니다.
pop과 dismiss를 한번 해서는 되돌아 갈 수 없는 곳으로도 갈 수 있습니다.
1. first view에 second view로 진행하는 액션과 UIStoryboardSegue를 파라미터 받는 IBAction을 만듭니다.
@IBAction func unwindVC1 (segue : UIStoryboardSegue) {}
2. Unwind를 하고자 하는 3번 ViewController가 존재하는 Storyboard에서 Control 키를 누른 채, 아래와 같이 클릭된 ViewController 아이콘에서 Exit으로 드래그하면 1번 ViewController에서 선언한 함수가 팝업에 뜹니다. 팝업에 뜬 segue를 클릭합니다.
3. 선언된 Unwind segue를 클릭하여 오른쪽 사이드 바에서 identifier를 선언해줍니다.
4. 3번 ViewController에서 아래의 코드를 선언해주면 Unwind Segue 구현이 완료됩니다.
@IBAction func goTo1(_ sender: UIButton) {
performSegue(withIdentifier: “unwindToVC1”, sender: self)
}
이 과정을 마치면 3번 View에서 어떠한 경우에도 1번 View로 이동하게 됩니다.
prepareForSegue()
: 세그웨이 직전 제어sender
는 Segue를 발생시킨 trigger오브젝트이다.segue.identifier
프로퍼티를 이용해서 segue
종류에 따른 분기가 가능하다.segue.destination / segue.source
프로퍼티를 이용해서 destination
에 해당하는 뷰 컨트롤러에 데이터를 전달할 수 있다.https://velog.io/@wook4506/iOS-Swift-화면-이동하기-세그-Segue
https://codecrafting.tistory.com/36
https://o-o-wl.tistory.com/44
https://sylii.tistory.com/4
다음 포스팅에서는
push와 present의 차이와
NavigationController의 push와 present 예정