이 글은 꼼꼼한 재은씨 기본편을 공부하고 정리한 글입니다.
뷰 컨트롤러는 뷰에 대한 관리를 주로 한다.
화면 전환이 발생할 때 다른 뷰 컨트롤러와 서로 통신하고 조정하는 일을 수행한다.
화면을 구성하는 데에는 세 가지 주요 객체가 사용된다.
UIScreen : 기기에 연결되는 물리적인 화면을 정의하는 객체
UIWindow : 화면 그리기 지원 도구를 제공하는 객체
UIView : 그리기를 수행할 객체 세트
ViewController는 반드시 필요한 요소는 아니지만 iOS에는 뷰 컨트롤러에 뷰와 리소스를 관리하는 역할을 맡기고 이 역할에 대한 내용은 UIViewController 클래스에 정의되어 있다.
따라서 모든 뷰 컨트롤러는 UIViewController를 상속받아야 한다.
Window에 뷰 컨트롤러를 할당해서 뷰 컨트롤러가 자동으로 자신에게 첨부된 뷰들을 화면에 추가하도록 해야한다
📌 HelloWorld 프로젝트 만들기
[1.1.2] 프로젝트 설정
프로젝트를 만들면 위와 같은 화면들이 나오게 된다.
Supported Destinations : 지원하는 기기를 추가하거나 제거 가능
Minimun Deployments : 지원하는 최소 버전
Identity : 앱의 카테고리, 버전등을 바꿀 수 있다.
Deployment Info : 기기의 방향옵션을 적용할 수 있다.
App Icons and Lanch Screen : 앱의 아이콘에 대한 설정과 초기 로딩 페이지 설정을 관리한다.
Frameworks, Librariew, and Embedded Content : 프레임워크나 라이브러리를 추가할 때 등록하는 곳
[1.1.3] 프로젝트 구성과 스토리보드
클래스 파일인 AppDelegate.swift와 ViewController.swift
화면을 담당하는 Main.storyboard파일, LaunchScreen.storyboard파일
이미지 등 리소스를 관리하는 Assets.xcasste
프로젝트의 설정을 담당하는 Info.plist파일
swift확장자로 이루어진 클래스 파일은 앱의 소스 코드를 구성하는 역할을 한다.
AppDelegate.swift파일은 앱 전체의 생명 주기 관리를 위임받은 객체인 앱 델리게이트를 구현한 클래스
- 앱 전체에 적용해야 할 기능을 담당하는 클래스 ( 앱이 실행되고 종료될 때, 활성화 상태가 되거나 비활성화 상태가 될 때, 백그라운드 상태로 들어가는 등의 다양한 상태 변화를 감지하고 이를 처리를 해 주어야 할 때 사용
ViewController.swift파일은 뷰 컨트롤러를 구현한 클래스로
- 앱이 하나 이상의 화면을 가지는데 이를 관리하기 위해 사용되는 것이 뷰 컨트롤러 ( 화면의 개수만큼 뷰 컨트롤러가 필요하다 )
storyboard확장자로 이루어진 파일은 유저 인터페이스를 종합적으로 구현하는 역할
- Main은 앱의 사용자 인터페이스 설계를 담당
- LaunchScreen은 앱을 실행하면 처음 나타나는 시작 화면을 구성 ( 스플래시 Splash라고도 부른다 )
[1.1.4] 스토리보드로 화면 구성하기
보통은 하나의 뷰 컨트롤러 = 하나의 화면으로 이해하면 되지만
여러 개의 뷰 컨트롤러가 하나의 화면인 경우도 있다.
아이패드에서는 Split - View -Controller로 여러 개의 화면을 동시에 보일 수 있다.
뷰 컨트롤러 상단에는 도크(Dock)라는 부분이 있는데 이 부분을 선택하면 정확하게 뷰 컨트롤러를 선택할 수 있다.
뷰 컨트롤러의 크기를 어떤 기기에 맞춰서 표시할 지를 고를 수 있다.
크기만 지정될 뿐 시뮬레이터는 지정된 시뮬레이터에서 실행된다.
command + shift + L 를 누르면 라이브러리를 실행할 수 있다.
첫번째 화면이라는 Label과 인사하기라는 Button을 삽입
[1.1.5] 화면 전환 구현하기
새로운 뷰 컨트롤러를 만들고 페이지를 이동시킬 버튼을 드래그하면
팝업 메뉴가 나오는데 화면 전환 방식을 선택하는 팝업이다.
Present Modally를 선택한다.
가운데 선으로 연결된 것을 확인할 수 있다.
화살표가 가리키는 방향으로 화면전환이 이루어진다.
Present Modally방식은 sheet를 열어서 화면전환을 해주는 방식이다.
Segue(세그웨이)방식
iOS에서 화면을 전환하는 방법중에 하나로 스토리보드를 통해 출발지와 목적지를 직접 지정하는 방식을 세그웨이를 이용한 화면전환이라고 하며 두 개의 뷰 컨트롤러 사이에 연결된 화면 전환 객체를 세그웨이라고 한다.
[1.1.6] 뷰 컨트롤러에 소스코드 작성
UI를 표현하는 각각의 뷰 컨트롤러에는 프로그래밍적으로 제어하기 위한 클래스 객체가 배정된다.
이 클래스의 소스코드를 통해 UI를 마음대로 조정할 수 있다.
일반적으로 뷰 컨트롤러를 추가하면 소스코드를 작성할 클래스를 정의하고 뷰 컨트롤러와 클래스를 연결해주어야 한다.
기본 템플릿에 의해 만들어진 뷰 컨트롤러는 이미 ViewController라는 클래스와 연결이 되어있다. 이 클래스는 ViewController.swift파일에 정의되어 있으므로 바로 소스코드를 작성하면 된다.
control + option + command + enter를 누르면 어시스턴트가 실행된다.
option을 누르고 파일을 선택하면 원하는 파일이 어시스턴트에 나타난다.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
ViewController.swift파일에 있는 초기코드를 살펴보면
1. UIKit를 import한다.
UIKit은 UIKit프레임워크를 사용하기 위한 기본 파일들을 읽어 들이는 부분이다.
앱 화면을 구성하는 데에 필요한 모든 객체들이 포함된 프레임워크라고 생각하면 된다.
2. class ViewController: UIViewController
UIViewController를 상속받은 ViewController라는 클래스를 정의한 구문으로
UIViewController는 UIKit 프레임워크에 정의되어 있는 클래스이며, 기본 뷰 컨트롤러를 구현하는 핵심 클래스이다.
뷰 컨트롤러를 정의하려면 반드시 이 클래스를 상속받거나 상속받은 다른 클래스를 상속받아야 한다.
3 . override func viewDidLoad()
부모클래스 UIViewController 클래스에 정의되어 있는 메소드로, 뷰의 로딩이 완료되었을 때 시스템에 의해 자동으로 호출된다.
리소스를 초기화, 초기화면을 구성등, 처음 한 번만 실행해야 하는 초기화 코드는 대부분 이 메소드에 작성한다.
부모메서드에 정의가 되어있는 메소드를 새로 작성하기 때문에 override키워드가 추가되어 있다.
4. super.viewDidLoad()
부모 클래스에 정의된 viewDidLoad()메소드의 내용도 모두 실행한다는 의미
viewDidLoad()메소드는 적절한 시점에서 시스템에 의해 자동으로 호출되는 콜백 메소드(CallBack Method)이다.
콜백메소드는 이동통신사나 쇼핑몰에서 전화를 했는데 대기자 수가 너무 많은 경우 전화번호를 남기면
직접 전화를 걸어서 업무 처리를 해주는 것에서 유래했다.
레이블 연결
마우스우클릭 드래그해서 연결해준다.
uiTitle이라는 이름을 가진 UILabel타입의 변수를 생성했다.
@IBOutlet 는 인터페이스 빌더의 레이블을 스위프트 클래스가 참조할 수 있도록 연결된 멤버 변수이다.
똑같이 버튼을 연결해주면
@IBAction func sayhellow(_ sender: UIButton) {
}
변수가 아닌 메서드가 생긴다.
@IBAction func sayhellow(_ sender: UIButton) {
self.uiTitle.text = "Hello World!"
}
메서드안에 코드를 입력하면 버튼을 누르면 uiTitle 텍스트가 바뀌는 코드가 실행된다.
[1.2.1] 시작화면 편집
애플 ui 가이드에서는 시작화면을 권장한다고 한다.
시작화면은 기본적으로 LaunchScreen.storyboard파일이 제공되며
설정에서 원하는 스토리보드파일을 넣어서 시작화면을 바꿀 수 있다.
AppDelegate.swift파일에 위 메서드에 sleep(5)를 하면 앱 실행을 5초 지연시킬 수 있다.
didFinishLaunchgWithOptions메서드는 앱이 처음 실행될 때 필요한 시스템적 처리를 모두 끝내고 메인 화면을 표시하기 직전에 호출된다.
앱이 실행되면 시작화면이 화면에 뜬 후 didFinishLaunchgWithOptions 메서드가 호출되고 메소드 내부의 내용이 모두 실행되면 Main.storyboard의 내용이 출력된다는 뜻이다.
따라서 시작화면이 출력된 후 5초 지연 후 메인화면이 실행된다.
'Swift > 꼼꼼한 재은씨 기본편' 카테고리의 다른 글
[꼼꼼한 재은씨 기본편 Chapter 04] 화면 전환 - present메소드 (0) | 2024.07.04 |
---|---|
[꼼꼼한 재은씨 기본편 Chapter 03] 화면상의 객체를 제어하는 방법 (0) | 2024.07.01 |
[꼼꼼한 재은씨 기본편 Chapter 02] iOS 앱의 구조와 코코아 터치 프레임워크 (0) | 2024.06.26 |