티스토리 뷰
[iOS프로그래밍기초] 8주차
AppDelegate와 SceneDelegate는 iOS 애플리케이션에서 애플리케이션의 생명 주기와 사용자 인터페이스를 관리하는 데 중요한 역할을 합니다. 각각의 파일이 수행하는 기능을 자세히 설명하겠습니다.
AppDelegate
애플리케이션 생명 주기 관리:
AppDelegate는 애플리케이션의 전체 생명 주기를 관리합니다. 애플리케이션이 시작될 때, 종료될 때, 백그라운드로 전환될 때 등의 이벤트를 처리합니다.
초기 설정:
didFinishLaunchingWithOptions 메소드에서 애플리케이션이 시작될 때 초기 설정을 할 수 있습니다. 예를 들어, 데이터베이스 초기화나 사용자 기본 설정 로드 등을 수행할 수 있습니다.
푸시 알림 및 외부 URL 처리:
푸시 알림을 수신하거나 외부 URL을 통해 애플리케이션이 열릴 때의 처리를 담당합니다.
SceneDelegate
다중 씬 지원:
iOS 13부터 도입된 SceneDelegate는 다중 씬(멀티태스킹)을 지원합니다. 즉, 사용자가 여러 개의 창을 동시에 열 수 있는 기능을 제공합니다.
씬 생명 주기 관리:
각 씬의 생명 주기를 관리합니다. 씬이 생성될 때, 활성화될 때, 비활성화될 때, 종료될 때 등의 이벤트를 처리합니다.
UI 구성:
SceneDelegate에서 각 씬의 사용자 인터페이스를 설정하고 관리합니다. 예를 들어, 새로운 씬이 생성될 때 어떤 뷰 컨트롤러를 표시할지 결정할 수 있습니다.
요약
AppDelegate: 애플리케이션 전체의 생명 주기를 관리하며 초기 설정 및 백그라운드 처리 등을 담당합니다.
SceneDelegate: 각 씬의 생명 주기와 사용자 인터페이스를 관리하며, 멀티태스킹 환경을 지원합니다.
이 두 파일은 함께 작동하여 iOS 애플리케이션의 구조와 동작을 지원합니다.
기존 소스 변경하기
//
// ViewController.swift
// HelloJin
//
// Created by 소프트웨어컴퓨터 on 2024/10/17.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var lable: UILabel!
@IBOutlet weak var txtName: UITextField!
var timer: Timer?
@IBAction func btnSend(_ sender: UIButton) {
lable.text = "Hello, " + (txtName.text ?? "")
print(lable.text ?? "", txtName.text ?? "")
}
override func viewDidLoad() {
super.viewDidLoad()
// Timer 설정: 1초마다 배경색 변경
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(changeBackgroundColor), userInfo: nil, repeats: true)
}
@objc func changeBackgroundColor() {
// 랜덤한 배경색 생성
let randomColor = UIColor(red: CGFloat(arc4random() % 256) / 255.0,
green: CGFloat(arc4random() % 256) / 255.0,
blue: CGFloat(arc4random() % 256) / 255.0,
alpha: 1.0)
self.view.backgroundColor = randomColor
}
deinit {
// Timer 해제
timer?.invalidate()
}
}
앱을 실행하면 배경색이 주기적으로 바뀝니다.
import UIKit // UIKit 프레임워크를 임포트하여 사용자 인터페이스 관련 기능을 사용합니다.
class ViewController: UIViewController { // ViewController 클래스를 정의하고 UIViewController를 상속받습니다.
var timer: Timer? // Timer 객체를 저장할 변수를 선언합니다.
override func viewDidLoad() { // 뷰가 메모리에 로드된 후 호출되는 메소드입니다.
super.viewDidLoad() // 부모 클래스의 viewDidLoad 메소드를 호출하여 기본 설정을 수행합니다.
// Timer 설정: 1초마다 배경색 변경
timer = Timer.scheduledTimer(timeInterval: 1.0, // 타이머의 간격을 1초로 설정합니다.
target: self, // 타이머가 호출할 메소드가 있는 객체입니다.
selector: #selector(changeBackgroundColor), // 호출할 메소드를 지정합니다.
userInfo: nil, // 추가 정보를 전달할 필요가 없으므로 nil로 설정합니다.
repeats: true) // 타이머가 반복 실행되도록 설정합니다.
}
@objc func changeBackgroundColor() { // 배경색을 변경하는 메소드입니다. @objc를 사용하여 Objective-C 런타임에서 호출할 수 있도록 합니다.
// 랜덤한 배경색 생성
let randomColor = UIColor(red: CGFloat(arc4random() % 256) / 255.0, // 랜덤한 빨간색 값 생성
green: CGFloat(arc4random() % 256) / 255.0, // 랜덤한 초록색 값 생성
blue: CGFloat(arc4random() % 256) / 255.0, // 랜덤한 파란색 값 생성
alpha: 1.0) // 불투명도를 1로 설정하여 완전 불투명한 색상으로 만듭니다.
self.view.backgroundColor = randomColor // 생성한 랜덤 색상을 뷰의 배경색으로 설정합니다.
}
deinit { // 객체가 메모리에서 해제될 때 호출되는 메소드입니다.
// Timer 해제
timer?.invalidate() // 타이머가 동작 중이라면 정지시킵니다.
}
}
변수는 아울렛이라 하고, 함수는 액션이라 합니다~
뷰 컨트롤러 아주 중요하다!
이건 시험에 매년 나오기 때문에 주의해서 보자
print(sender) 결과
리셋 버튼을 만들었다.
//
// ViewController.swift
// HelloJin
//
// Created by 소프트웨어컴퓨터 on 2024/10/17.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var lable: UILabel!
//@IBOutlet weak var lblHello: UILabel!
@IBOutlet weak var txtName: UITextField!
@IBAction func btnSend(_ sender:UIButton) {
lable.text = "Hello, "+txtName.text!
print(lable.text, txtName.text)
//print(sender)
}
@IBAction func resetBtn(_ sender: UIButton) {
lable.text = "안녕하세요!"
txtName.text = ""
}
override func viewDidLoad() {
super.viewDidLoad()
//print("Start")
// Do any additional setup after loading the view.
}
}
숫자 더하는 UI 만들었다. (계산기?)
//
// ViewController.swift
// HelloJin
//
// Created by 소프트웨어컴퓨터 on 2024/10/17.
//
import UIKit
class ViewController: UIViewController {
var x = 0
@IBOutlet weak var lvlnumber: UILabel!
@IBOutlet weak var lable: UILabel!
//@IBOutlet weak var lblHello: UILabel!
@IBOutlet weak var txtName: UITextField!
@IBAction func btnSend(_ sender:UIButton) {
lable.text = "Hello, "+txtName.text!
print(lable.text, txtName.text)
//print(sender)
}
@IBAction func resetBtn(_ sender: UIButton) {
lable.text = "안녕하세요!"
txtName.text = ""
}
@IBAction func btnUp(_ sender: UIButton) {
x = x + 1
lvlnumber.text = String(x)
}
@IBAction func btnDown(_ sender: UIButton) {
x = x - 1
lvlnumber.text = String(x)
}
override func viewDidLoad() {
super.viewDidLoad()
//print("Start")
// Do any additional setup after loading the view.
}
}
02 Hello World 앱 만들며 Xcode에 완벽 적응하기
03 원하는 이미지 화면에 출력하기 - 이미지 뷰
04 데이트 피커 사용해 날짜 선택하기
05 피커 뷰 사용해 원하는 항목 선택하기
06 얼럿 사용해 경고 표시하기
07 웹 뷰로 간단한 웹 브라우저 만들기
08 맵 뷰로 지도 나타내기
09 페이지 이동하기 - 페이지 컨트롤
10 탭 바 컨트롤러 이용해 여러 개의 뷰 넣기
11 내비게이션 컨트롤러 이용해 화면 전환하기
12 테이블 뷰 컨트롤러 이용해 할 일 목록 만들기
13 음악 재생하고 녹음하기
14 비디오 재생 앱 만들기
15 카메라와 포토 라이브러리에서 미디어 가져오기
16 코어 그래픽스로 화면에 그림 그리기
17 탭과 터치 사용해 스케치 앱 만들기
18 스와이프 제스처 사용하기
19 핀치 제스처 사용해 사진을 확대/축소하기
- Do it! 스위프트로 아이폰 앱 만들기 입문, 송호정, 이범근 저,이지스퍼블리싱, 2023년 01월 20일
- https://www.yes24.com/Product/Goods/116918114
- https://github.com/doitswift/example
'대학교 > iOS프로그래밍기초' 카테고리의 다른 글
[iOS 프로그래밍기초] 10주차 (5) | 2024.11.14 |
---|---|
[iOS프로그래밍기초] 9주차 (1) | 2024.11.07 |
옵셔널 타입 (0) | 2024.10.31 |
[iOS프로그래밍기초] 7주차 (2) | 2024.10.17 |
[iOS프로그래밍기초] 6주차 (2) | 2024.10.10 |