새소식

iOS/클론코딩(입대 전 IOS 맛보기)

[iOS앱개발] #2 LED전광판 앱

  • -

구현목표 : LED전광판 화면을 표시하고 전광판에 표시할 텍스트, 텍스트 컬러, 배경색상을 설정화면에서 설정한다.


UINavigationController, 화면전환개념, ViewController Life CyCle, 화면간 데이터전달하기, 에셋 카탈로그

 

UI Navigation Controller

 

Content View Controller

  • 스토리보드 생성시 기본으로 생성되는 View Controller로 화면을 규성하는 뷰를 직접 구현하고 관련된 이벤트를 처리

 

Container View Controller

  • 하나 이상의 Child View Controller을 가지고 있다.
  • 하나 이상의 Child View Controller 를 관리하고 레이아웃과 화면 전환을 담당한다.
  • 화면 구성과 이벤트 관리는 Child View Controller에서 한다.
  • Container View Controller 는 대표적으로 Navigation Controller 와 TabBar Controller가 있다.

Navigation Controller

계층구조로 된 Content를 순차적으로 보여준다.

 

Navigation Controller

 

 

Navigation Stack

 

Back버튼이나 Left edge 스와이프를 사용하면 이전화면으로 돌아가며 스택에서 B화면을 Pop(제거)한다.

Navigation Stack

 

 

Navigation Bar

RootViewController외에 모든 ViewController에서 사용자가 계층구조에서 뒤로 갈 수 있도록한다.

 


화면전환개념

화면전환방법

  • View Controller의 View 위에 다른 View를 가져와 바꿔치기(메모리 누수위험의 이유로 사용을 지양한다)
  • View Controller에서 다른 View Controller를 호출하여 전환하기
  • Navigation Controller를 사용하여 화면 전환하기
  • 화면전환용 객체, 세그웨이(Segueway)를 사용하여 화면 전환하기

View Controller에서 다른 View Controller를 호출하여 전환하기(aka. Presentation방식)

기존 View Controller위에 새로운 View Controller의 화면을 넣는 방식으로 현재 View Controller에 이동할 대상의 View Controller를 직접 호출해서 화면에 표시하는 방법

 

Presentation방식에서 사용하는 메소드

present 메소드 : 기존화면에 새로운 ViewController를 보여주게 하는 메소드

  • 첫번째 파라미터: 이동할 화면의 ViewController 인스턴스를 할당한다.
  • 두번째 파라미터: 화면을 전환할 때 애니메이션 효과의 유무를 Bool값으로 할당한다.
  • 세번째 파라미터: 화면전환이 완료된 후에 호출되는 Completion이라는 클로저를 정의, 화면전환이 완료된 후에 처리해야 할 로직이 있다면 클로저 안에 작성하면 된다.

 

dismiss 메소드 : present되었던 화면에서 이전화면으로 돌아가게하는 메소드

  • 첫번째 파라미터: 화면을 전환할 때 애니메이션 효과의 유무를 Bool값으로 할당
  • 두번째 파라미터: 화면전환이 완료된 후에 호출되는 Completion이라는 클로저를 정의, 화면전환이 완료된 후에 처리해야할 로직이 있다면 클로저 안에 작성하면 된다.

Navigation Controller를 사용하여 화면 전환하기(aka. Push방식)

  • Navigation Controller는 계층적인 성격을 띄는 컨텐츠구조를 관리하기 위한 Controller
  • View컨트롤러의 전환을 직접 컨트롤
  • 앱의 Navigation 정보를 표시하는 역할
  • 스택으로 자식 뷰컨트롤러를 관리

pushViewController 메소드

  • 첫번째 파라미터: 이동할 화면의 ViewController 인스턴스를 할당한다.
  • 두번째 파라미터: 화면을 전환할 때 애니메이션 효과의 유무를 Bool값으로 할당한다.

popViewController

  • 첫번째 파라미터: 화면을 전환할 때 애니메이션 효과의 유무를 Bool값으로 할당

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

Segueway

  • 세그웨이는 두개의 뷰컨트롤러 사이에 연결된 화면전환 객체를 의미
  • 스토리보드를 이용해 출발지와 목적지를 직접 지정하는 방식
  • 따로 코드를 사용하지 않고 스토리보드만을 이용해 화면을 전환 할 수 있다

 

세그웨이 종류

  • Manual Segueway : 출발점이 뷰컨트롤러 그 자체인 경우 
    • 적절한 시점에 performSegue 메소드를 호출하면서 세그웨이가 실행되어 화면전환이 일어남
  • Action Segueway : 출발점이 버튼이나 셀 등인 경우
    • 버튼터치와 같은 트리거 이벤트세그웨이실행으로 바로 연결되어서 소스코드를 추가하지 않고도 화면전환을 구현 할 수 있음
    • Action Segueway의 종류
      • Show : 가장 일반적인 세그웨이, 네비게이션 컨트롤러를 사용하면 화면전환시 뷰컨트롤러가 네이게이션 스택에 쌓이게 된다
      • Show Detail : SplitView에서 사용되는 세그웨이로 아이폰에서 사용하면 Show와 똑같이 동작하지만 아이패드에서 사용하게 되면 Master-Slave구조로 보이게 된다.
      • Present Modaily : 이전 뷰컨트롤러를 덮으면서 새로운 화면이 나타나게 된다.
      • Present As Popover : 아이패드에서 팝업창을 띄울때 사용한다.
      • Custom : 세그웨이를 사용자가 원하는 방식으로 커스텀 할 때 사용한다.

다양한 방법으로 화면전환 해보기

 

화면전환 구현 코드 

//Present
//코드로 Present할 때 사용 할 수 있는 메소드
@IBAction func tapCodePresentBotton(_ sender: UIButton) {
        guard let viewController2 = self.storyboard?.instantiateViewController(withIdentifier: "CodePresentBiewController") else { return }
        self.present(viewController2, animated: true)
    }

//Present로 화면전환 했을 때 Back버튼 코드
@IBAction func tapBackBotton(_ sender: UIButton) {
        self.presentingViewController?.dismiss(animated: true)
    }
    
//-----------
 
//Push
//코드로 Push 할 때 사용 할 수 있는 메소드
@IBAction func tapCodePushBotton(_ sender: UIButton) {
        guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "CodePushViewController") else { return }
        self.navigationController?.pushViewController(viewController, animated: true)
    }

//Push로 화면전환 했을 때 Back버튼 코드
@IBAction func backBotton(_ sender: UIButton) {
        self.navigationController?.popViewController(animated: true)
    }

 

 


View Controller Life Cycle

 

UIViewController의 객체에는 View객체를 관리하는 메서드 들이 정의되어있다

메서드들은 자신들이 호출되어야 하는 타이밍에 IOS시스템에 의해 자동으로 호출된다. 

의 하이클래스를 생성할 때 에 정의 된 이 메서드들을 오버라이드하여 라이프사이클 상황에 맞게 적절한 로직들을 메서드에 추가할 수 있다.

시스템이 어떤 메서드를 언제 호출해야하는지 먼저 이해해야만 그 시점에 잘 맞춰 UI의 변화나 데이터의 변화를 잘 처리 할 수 있다.

 

 

ViewDidLoad()

- 뷰 컨트롤러의 모든 뷰들이 메모리에 로드됐을 때 호출

- 메모리에 처음 로드 될 때 한 번만 호출

- 보통 딱 한번 호출될 행위들을 이 메소드 안에 정의 함

- 뷰와 관련된 추가적인 초기화 작업, 네트워크 호출

 

ViewWillAppear()

- 뷰가 뷰 계충에 추가되고, 화면에 보이기 직전에 매 번 호출

- 다른 뷰로 이동했다가 돌아오면 재호출

- 뷰와 관련된 추가적인 초기화작업

 

ViewDidAppear()

- 뷰 컨트롤러의 뷰가 뷰 계층에 추가된 후 호출

- 뷰를 나타낼 때 필요한 추가작업

- 애니메이션을 시작하는 작업

 

viewWillDisappear()

- 뷰 컨트롤러의 뷰가 뷰 계층에서 사라지기 전에 호출

- 뷰가 생성된 뒤 작업한 내용을 되돌리는 작업

- 최종적으로 데이터를 저장하는 작업

 

viewDidDisappear()

- 뷰 컨트롤러의 뷰가 뷰 계층에서 사라진 뒤에 호출

- 뷰가 사라지는 것과 관련된 추가 작업

 

ViewController 의 라이프사이클은 뷰의 상태변화에 따라 시스템에 의해 특정 메소드를 호출한다.

개발자는 적절한 상황에 맞춰서 관련된 작업들을 메소드들 안에 정의하면 된다.


화면간 데이터 전달하기

- 코드로 구현된 화면 전환 방법에서 데이터 전달하기

- 세그웨이로 구현된 화면 전환 방법에서 데이터 전달하기

- Delegate 패턴을 이용하여 이전 화면으로 데이터 전달하기


LED 전광판


글의 모든 내용은 패스트캠퍼스 강의를 시청하고 작성한 내용입니다.

End

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.