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