-
(iOS) ViewController 화면 전환 방법Programing Language/iOS(Swift) 2019. 10. 17. 14:18728x90반응형
뷰 컨트롤러 직접 호출에 의한 화면 전환
- 현재의 뷰 컨트롤러에서 이동할 대상 뷰 컨트롤러를 직접 호출해서 화면에 표시한다. Presentation 방식이라고 부르기도한다.
- 화면 전환은 *비동기 방식*으로 전환되기 때문에 화면 전환이 끝나기 전에 다음 코드를 실행한다. 따라서 위 메서드를 이용해야 한다. - 비동기 방식 : 하나의 처리가 끝나기를 기다리지 않고 다음 작업을 바로 이어서 수행하는 방식을 비동기 방식이라고 부른다. - *present 메서드*를 이용한 화면 전환은 기존 뷰 컨트롤러를 유지한 채, 그 위에 새로운 뷰 컨트롤러의 화면을 덮는 방식이다. - dismiss 메서드에 의해서 걷어내진 viewcontroller화면은 운영체제에 의해 곧 메모리에서 해제된다. - dismiss 메서드를 써서 화면을 전환하면 화면을 걷어내는 주체가 자기자신viewcontorller가 아니라 자신을 띄우고 있는 이전화면 viewcontroller 라는 점이다! (즉, 이전화면이 현재화면을 걷어내는것임.) - 즉 viewcontroller가 주체가 되어서 메서드를 호출하는게 아니라 presentatingViewController를 통해서 메서드를 호출한다. (두 view의 관리자) - 이전 뷰를 띄울 때 이전화면을 복귀가 아닌 PresentatingViewController를 통해서 이전화면을 새로 호출하면 안된다. 이유는 그럼 ***뷰가 계속 중복해서 쌓이게 되어 메모리상 비효율적***이다. <br> #### CODE :: 예제 --- moveNextAction 버튼을 누르면 화면전환이 된다. - 두번째 뷰 ID : secondView ```Swift class ViewController: UIViewController { @IBAction func moveNextAction(_ sender: Any) { //이동할 뷰 컨트롤러 객체를 stroyboardID 정보를 이용하여 참조 //let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) if let view_Controller = self.storyboard?.instantiateViewController(withIdentifier:"secondView") { // 화면 전환할 때의 애니메이션 타입 // UIModalTransitionStyle.<변환스타일> // 1. coverVertical : 모달형식으로 등장 // 2. crossDissolve : 번인아웃되면서 화면변경 // 3. partialCurl : 책넘김 효과 // 4. flipHorizontal : 화면돌아가는 효과(flip) view_Controller.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal //인자값으로 뷰 컨트롤러 인스턴스를 넣고 프레젠트 메서드 호출 // 첫번째 인자 : 전환될 뷰 self.present(view_Controller, animated: true) } }
Custom Class for ViewController
하나의 뷰컨트롤러에는 하나의 뷰컨트롤러 클래스가 있어야 한다.
- customClass.swift 파일 추가 (UIViewController 상속받아 생성)
- storyboard에서 해당 뷰컨트롤러를 클릭 후 인스펙터창에서 Cumstom Class 영역에서 만들어준 customClass.swift 를 class란에 써넣어준다.
- Identity에 StroyboardId에 swift클래스 명과 같은 명을 넣어준다
- 소스 - 뷰 연결 완료!
화면 전환 기법2 :: 네비게이션 컨트롤러를 이용한 화면 전환
-
뷰 컨트롤러들의 계층적 구조를 관리하는 역할을 한다. 직접 컨텐츠를 담고 화면을 구성하지 않지만, 대신 다른 뷰를 포함하고 있으며 포함된 모든 뷰 컨트롤러에 내비게이션 바를 생성하는 특징이 있다. (스토리보드상 보이지 않더라도 빌드하면 포함되어져 있다.)
-
항상 컨텐츠 계층구조의 시작점 역할을 하는 뷰 컨트롤러와 함께 붙어 다니는데, 이를 Root View Controller라고 한다.
-
Stack 구조를 갖고 있다.
//최상위에 뷰 컨트롤러를 추가할 때 pushViewController(:animated:) //최상위 뷰 컨트롤러를 제거할 때 popViewController(animated:)
-
도중에 네비게이션컨트롤러를 추가할 경우 [Editor] -> [Embed in]->[Navigation Controller]를 눌러줘서 삽입시켜준다. 혹은 segue( -> Root view controller)를 통해 지정해준다.
-
네비게이션 컨트롤러를 사용하여 화면을 전환시켜주지 않았을 경우, 더이상 네이게이션 컨트롤러의 제어하에 있지 않게 된다.
@IBAction func click_movebtn(_ sender: Any) { // viewcontrol에 이동할 viewcontroller에 스위프트 파일이 연결 되어있다면?? // pushViewController 메서드를 통해서 상수로 지정한 viewcontrol을 넣어 그쪽 파일로 넘어간다. if let viewcontrol = self.storyboard?.instantiateViewController(withIdentifier:"abcd"){ self.navigationController?.pushViewController(viewcontrol, animated: true) } }
참고 자료 :
https://hyunable.github.io/2017/11/18/viewChange/
iOS 화면 전환 기법 - 현아의 IT Playground
화면 전환 기법 iOS에서의 화면 전환 개념 뷰 컨트롤러의 뷰 위에 다르나 뷰를 가져와 바꿔치기하기 (특수사항/제한적으로 사용) 뷰 컨트롤러에서 다른 뷰 컨트롤러를 호출하여 화면 전환하기 네비게이션 컨트롤러를 사용하여 화면 전환하기 화면 전환용 객체 세그웨이(SegueWay)를 사용하여 화면 전환하기 iOS에서 화면 전환 특성 다음 화면으로 이동하는 방법과 이전화면으로 되돌아가는 방법이 다름 화면 전환 방식에 따라 이전 화면으로 되돌아가는 방법이 다름 화
hyunable.github.io
https://medium.com/@mingdaejo/ios-%ED%99%94%EB%A9%B4-%EC%A0%84%ED%99%98-b979188a1a82
iOS 화면 전환
특이하게 이 부분은 공부하더라도 iOS개발을 쉬면 백지화되더라구요. 저 스스로에게 개념을 다시 새기며 또 볼 일이 있을 것 같아서 이렇게 글을 씁니다.
medium.com
728x90반응형'Programing Language > iOS(Swift)' 카테고리의 다른 글
(iOS) TableView에서 사진 삭제하기 후 정렬하기 (0) 2019.10.28 (iOS) Xcode유용한 단축키 모음 (0) 2019.10.25 [iOS] 커스텀 알림창 만들기 (0) 2019.10.25 (iOS) UIImageView에 url 로 이미지 넣기 (0) 2019.10.24 (iOS) 화면간 데이터 전송 방법 (0) 2019.10.17