Ch 02. LED 전광판 앱 만들기

3 분 소요

Simulator Screen Shot - iPhone 11 Pro - 2022-03-31 at 11 15 41 Simulator Screen Shot - iPhone 11 Pro - 2022-03-31 at 11 15 58

기능상세:
  • LED 전광판 화면을 표시
  • LED 전광판에 표시할 텍스트, 텍스트 컬러, 배경 색상을 설정 화면에서 설정
활용 기술:
  • UINavigationController
    • 계층구조로 구성된 content를 순차적으로 보여주는 Container View Controller
      • Navigation Stack을 사용하여 Child View Controller 관리
      • Segueway나 UINavigation Controller method를 사용하여 스택으로부터 ViewController를 추가, 제거

    Navigation Stack

    • Last-In First-Out

    Content View Controller

    • 화면을 구성하는 뷰를 직접 구현하고 관련된 이벤트를 처리
    • Storyboard 생성시 기본으로 생성되는 ViewController

    Container View Controller

    • 하나 이상의 Child View Controller를 내포
    • Child View Controller를 관리하고 레이아웃과 화면전환을 담당
    • 화면 구성과 이벤트 관리는 Child View Controller에서 함
    • Container View Controller 는 대표적으로 Navigation Controller 와 TabBar Controller으로 구성
  • 화면 전환 개념
    크게는

    1. 소스코드를 통해 전환하는 방식
    2. Storyboard를 통해 전환하는 방식(Segue)

    작게는

    1. View Controller의 View 위에 다른 View를 가져와 바꿔치기(메모리 누수위험-거의 사용x)

    2. View Controller에서 다른 View Controller를 호출하여 전환하기
      • 현재 뷰 컨트롤러에서 이동할 대상의 뷰 컨트롤러를 직접 호출해서 화면에 표시(presentation 방식)
      • 기존 뷰 컨트롤러 위에 새로운 뷰 컨트롤러 화면을 덮는 방식

        func present(_ viewControllerToPresent: UIViewController,
                     animated flag: Bool, 
                     completion: (() -> Void)? = nil)
        

        viewControllerToPresent: 이동할 새로운 화면의 ViewController instance
        flag: 화면을 전환할 때 애니메이션 효과 유무
        completion: 클로저를 정의해주면 화면 전환이 완료되는 시점에 맞추어 completion 클로저 호출

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

        flag: 이전으로 돌아갈 때 애니메이션 효과 유무
        completion: 이전으로 돌아가는 게 완료되면 클로저 호출

    3. Navigation Controller를 사용하여 화면 전환하기
      • View Controller의 전환을 직접 컨트롤
      • 앱의 Navigation 정보를 표시
      • Navigation Stack으로 Child View Controller를 관리

        pushViewController(_ viewController: UIViewController, 
                           animated: Bool)
        

        viewController: 새로운 화면으로 이동할 뷰 컨트롤러의 instance
        animated: 화면 전환이 될때 애니메이션을 사용 유무

        popViewController(animated: Bool) -> UIViewController?
        

        animated: 이전 화면으로 이동 될 때 애니메이션을 사용 유무

    4. 화면 전환용 객체 세그웨이(Segueway)를 사용하여 화면 전환하기
      • 스토리보드를 통해 출발지와 목적지를 직접 정함
      • 따로 코드를 사용하지 않고 스토리보드만으로 화면 전환

    Segueway

    • 두 개의 뷰 컨트롤러 사이의 연결된 화면 전환 객체

    • Manual Segueway
      출발점이 뷰 컨트롤러 자체인 경우
      • 적절한 시점에 Perform Segue 메소드를 호출하면서 세그웨이가 실행되어 화면전환 발생
    • Action Segueway(Trigger Segueway)
      출발점이 버튼, 셀 등인 경우 버튼 터치와 같은 트리거 이벤트가 세그웨이 실행으로 바로 연결
      1. Show
        가장 일반적, Navigation Controller를 사용하면 화면전환시 뷰컨트롤러가 Navigation Stack에 쌓이게 되고 만약 네비게이션 컨트롤러를 사용하지 않을 경우 presented modally와 동일하게 작동
      2. Show Detail
        Split View Controller에서 사용, 아이폰에서 사용하게 되면 Show Segueway와 똑같지만 아이패드에서 사용하게 되면 스플릿 구조의 Master-Slave 구조가 되서 보이게 됨
      3. Present Modaliy
        이전 뷰컨트롤러를 덮으면서 새로운 화면이 나타나게 됨 프레젠테이션 방식으로 화면 전환
      4. Present As Popover
        아이패드에서 사용, 팝업창을 띄울 때, 아이폰에서 사용x
      5. Custom
        세그웨이를 사용자가 원하는 방식으로 커스텀할 때 사용
  • ViewController Life Cycle
    • viewDidLoad()
      뷰 컨트롤러의 모든 뷰들이 메모리에 로드됐을 때 호출
      메모리에 처음 로드될 때 한 번만 호출
      보통 딱 한번 호출될 행위들을 이 메소드 안에 정의
      뷰와 관련된 추가적인 초기화 작업, 네트워크 호출(일회성작업)
    • viewWillAppear()
      뷰가 뷰 계층에 추가되고, 화면에 보이기 직전에 매 번 호출
      다른 뷰로 이동했다가 돌아오면 재호출
      뷰와 관련된 추가적인 초기화 작업
    • viewDidAppear()
      뷰 컨트롤러의 뷰가 뷰 계층에 추가된 후 호출
      뷰를 나타낼 때 필요한 추가 작업
      애니메이션을 시작하는 작업
    • viewWillDisappear()
      뷰 컨트롤러의 뷰가 뷰 계층에서 사라지기 전에 호출
      뷰가 생성된 뒤 작업한 내용을 되돌리는 작업
      최종적으로 데이터를 저장하는 작업
    • viewDidDisappear()
      뷰 컨트롤러의 뷰가 뷰 계층에서 사라진 뒤에 호출
      뷰가 사라지는 것과 관련된 추가 작업
  • 화면간 데이터 전달 하는 방법
    • 코드로 구현된 화면전환 방법에서 데이터를 전달하는 방법
      1. 뷰 컨트롤러를 인스턴스화 해주는 메소드에 전환되는 화면의 뷰 컨트롤러 클래스 타입으로 다운캐스팅
        (프로퍼티에 접근가능)
      2. name 프로퍼티에 값을 넘겨줌
      3. Outlet변수에 전달받은 값을 표시
    • segueway로 구현된 화면전환 방법에서 데이터를 전달하는 방법(prepare method)
      1. viewcontroller 클래스에서 prepare 메소드 override
      2. 전환하려는 viewcontroller instance를 가져오기 (segue.destination) -> 다운캐스팅
      3. name 프로퍼티에 값 넘겨줌
      4. Outlet변수에 전달받은 값을 표시
    • 전환된 화면에서 이전 화면으로 데이터를 전달하는 방법(Delegate 패턴)
      1. SendDataDelegate 프로토콜 정의
      2. 프로토콜 타입의 변수 정의 (delegate변수 사용시 weak 키워드 사용 - 메모리누수)
      3. dismiss or popViewController 함수 호출하기 전 프로토콜에서 정의한 함수 호출
      4. -(1) <코드> 다른 화면으로 전환되는 함수가 호출되기 전에 delegate 프로토콜에 접근하여 self로 초기화(delegate 위임)
        -(2) <세그웨이> prepare함수를 오버라이드하여 클래스 접근 후 delegate 위임
      5. 포로토콜 채택, 준수하기 위해 메소드 정의
  • Assets Catalog
    Resource(이미지, 음악파일) 추가 및 관리
    1x,2x,3x 이미지 추가 (다양한 해상도 적용)
추가할 기술:
  • 글자 슬라이드
  • 글자별 색 변환

카테고리:

업데이트: