BMI 판정 앱 만들기

- Finder에서 왼쪽 사이드바로 폴더를 드래그 하면 메뉴가 추가된다

- 네비게이터 여닫는 버튼

- 아웃라인 컨트롤러

- Attribute Inspector

- 뭔가 제대로 작동 안하면 Connections Inspector 보기
(시험)

- 엔트리 포인트(화살표) 가 사라졌다면 런치스크린에서 해당 항목을 체크해주자
====
업다운 앱 만들기

- 초기설정


레이블과 두 버튼을 Ctrl 버튼으로 클릭, 에디터까지 이어 각각 연결하기.
IB = Interface Builder
IBLable, IBAction

- 간단한 앱
====

- Do It 소스(3장)
- 버튼을 Outlet + Action으로 구성! 내부 텍스트의 변화.
- 내부 소스 (출처 Post 하단 기재)
//
// ViewController.swift
// ImageView
//
// Created by Ho-Jeong Song on 2021/11/23.
//
import UIKit
class ViewController: UIViewController {
// 현재 이미지가 확대 상태인지 여부를 저장하는 변수
var isZoom = false
// 켜진 전구 이미지
var imgOn: UIImage?
// 꺼진 전구 이미지
var imgOff: UIImage?
// 이미지가 표시되는 UIImageView 아울렛
@IBOutlet var imgView: UIImageView!
// 버튼 아울렛 (버튼 라벨을 바꾸기 위해 연결)
@IBOutlet var btnResize: UIButton!
// 앱 화면이 처음 로드될 때 실행되는 함수 (초기 설정)
override func viewDidLoad() {
super.viewDidLoad()
// 켜진/꺼진 이미지 가져오기
imgOn = UIImage(named: "lamp_on.png")
imgOff = UIImage(named: "lamp_off.png")
// 처음엔 켜진 이미지 보여주기
imgView.image = imgOn
}
// [확대/축소] 버튼을 눌렀을 때 실행되는 액션 함수
@IBAction func btnResizeImage(_ sender: UIButton) {
// 확대/축소 배율
let scale: CGFloat = 2.0
var newWidth: CGFloat, newHeight: CGFloat
// isZoom == true 면 현재 확대된 상태 → 축소해야 함
if (isZoom) {
// 축소 (크기 1/2)
newWidth = imgView.frame.width / scale
newHeight = imgView.frame.height / scale
// 버튼 글자를 '확대'로 변경
btnResize.setTitle("확대", for: .normal)
}
else {
// 확대 (크기 2배)
newWidth = imgView.frame.width * scale
newHeight = imgView.frame.height * scale
// 버튼 글자를 '축소'로 변경
btnResize.setTitle("축소", for: .normal)
}
// 이미지뷰의 크기 변경
imgView.frame.size = CGSize(width: newWidth, height: newHeight)
// 상태 반전 (true ↔ false)
isZoom = !isZoom
}
// 스위치를 켜거나 끌 때 실행되는 함수
@IBAction func switchImageOnOff(_ sender: UISwitch) {
if sender.isOn {
// 스위치 ON → 켜진 이미지
imgView.image = imgOn
} else {
// 스위치 OFF → 꺼진 이미지
imgView.image = imgOff
}
}
}
실습 소스 출처(양질의 소스 감사합니다)
Do it! 스위프트로 아이폰 앱 만들기 입문 [ 개정8판 ] 송호정, 이범근 저 이지스퍼블리싱 2025년 03월
----------------------------------------
02 Hello World 앱 만들며 Xcode에 완벽 적응하기
03 원하는 이미지 화면에 출력하기 - 이미지 뷰
04 데이트 피커 사용해 날짜 선택하기
05 피커 뷰 사용해 원하는 항목 선택하기
06 얼럿 사용해 경고 표시하기
07 웹 뷰로 간단한 웹 브라우저 만들기
08 맵 뷰로 지도 나타내기
09 페이지 이동하기 - 페이지 컨트롤
10 탭 바 컨트롤러 이용해 여러 개의 뷰 넣기
11 내비게이션 컨트롤러 이용해 화면 전환하기
12 테이블 뷰 컨트롤러 이용해 할 일 목록 만들기
13 음악 재생하고 녹음하기
14 비디오 재생 앱 만들기
15 카메라와 포토 라이브러리에서 미디어 가져오기
16 코어 그래픽스로 화면에 그림 그리기
17 탭과 터치 사용해 스케치 앱 만들기
18 스와이프 제스처 사용하기
19 핀치 제스처 사용해 사진을 확대/축소하기

//
// ViewController.swift
// DatePicker
//
// Created by Ho-Jeong Song on 2021/11/24.
//
import UIKit
class ViewController: UIViewController {
// Timer가 호출할 함수 지정 (#selector는 Objective-C 방식 함수 포인터)
let timeSelector: Selector = #selector(ViewController.updateTime)
// 타이머가 반복될 시간 간격 (1초마다 실행)
let interval = 1.0
// 테스트용 카운트 변수 (예제 코드에서 주석 처리됨)
var count = 0
// 현재 시간을 보여줄 라벨
@IBOutlet var lblCurrentTime: UILabel!
// 사용자가 DatePicker에서 선택한 시간을 보여줄 라벨
@IBOutlet var lblPickerTime: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// 앱 시작과 동시에 Timer 실행
// - interval (1초마다)
// - selector (updateTime 함수 호출)
// - target (self = 현재 ViewController)
// - repeats (true = 계속 반복)
Timer.scheduledTimer(timeInterval: interval,
target: self,
selector: timeSelector,
userInfo: nil,
repeats: true)
}
// DatePicker 값이 변할 때마다 호출되는 IBAction 함수
@IBAction func changeDatePicker(_ sender: UIDatePicker) {
let datePickerView = sender // 선택된 DatePicker
let formatter = DateFormatter() // 날짜 형식 Formatter 생성
formatter.dateFormat = "yyyy-MM-dd HH:mm EEE" // 년-월-일 시:분 요일 형식
// DatePicker에 있는 날짜를 지정 포맷으로 문자열 변환
lblPickerTime.text = "선택시간: " + formatter.string(from: datePickerView.date)
}
// Timer가 매초 실행하는 함수 (@objc → Selector로 호출되기 위함)
@objc func updateTime() {
// 현재 시간을 가져오기
let date = NSDate()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss EEE" // 초까지 표시 + 요일
// 현재시간 라벨 갱신
lblCurrentTime.text = "현재시간: " + formatter.string(from: date as Date)
}
}

//
// ViewController.swift
// Alert
//
// Created by BeomGeun Lee on
//
import UIKit
class ViewController: UIViewController {
// 전구 이미지(켜짐/꺼짐/제거됨)
let imgOn = UIImage(named: "lamp-on.png")
let imgOff = UIImage(named: "lamp-off.png")
let imgRemove = UIImage(named: "lamp-remove.png")
// 현재 전구가 켜져 있는지 상태 저장
var isLampOn = true
// 전구 이미지를 보여주는 UIImageView
@IBOutlet var lampImg: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// 앱 실행 시 기본 상태: 램프 켜짐
lampImg.image = imgOn
}
// "켜기" 버튼 클릭
@IBAction func btnLampOn(_ sender: UIButton) {
// 이미 켜져 있으면 경고창 띄우기
if isLampOn == true {
let lampOnAlert = UIAlertController(
title: "경고",
message: "현재 On 상태입니다",
preferredStyle: .alert
)
let onAction = UIAlertAction(
title: "네, 알겠습니다.",
style: .default,
handler: nil
)
lampOnAlert.addAction(onAction)
// 알림창 표시
present(lampOnAlert, animated: true, completion: nil)
} else {
// 꺼져 있으면 켜기
lampImg.image = imgOn
isLampOn = true
}
}
// "끄기" 버튼 클릭
@IBAction func btnLanpOff(_ sender: UIButton) {
// 켜져 있을 때만 끄는 동작
if isLampOn {
let lampOffAlert = UIAlertController(
title: "램프 끄기",
message: "램프를 끄시겠습니까?",
preferredStyle: .alert
)
// "네" → 전구 끄기
let offAction = UIAlertAction(
title: "네",
style: .default,
handler: { action in
self.lampImg.image = self.imgOff
self.isLampOn = false
}
)
// "아니오" → 취소
let cancelAction = UIAlertAction(
title: "아니오",
style: .default,
handler: nil
)
lampOffAlert.addAction(offAction)
lampOffAlert.addAction(cancelAction)
present(lampOffAlert, animated: true, completion: nil)
}
}
// "제거" 버튼 클릭
@IBAction func btnLampRemove(_ sender: UIButton) {
// 램프 제거 경고창 띄우기
let lampRemoveAlert = UIAlertController(
title: "램프 제거",
message: "램프를 제거하시겠습니까?",
preferredStyle: .alert
)
// "아니오, 끕니다" → 전구 Off
let offAction = UIAlertAction(
title: "아니오, 끕니다(off).",
style: .default,
handler: { action in
self.lampImg.image = self.imgOff
self.isLampOn = false
}
)
// "아니오, 켭니다" → 전구 On
let onAction = UIAlertAction(
title: "아니오, 켭니다(on).",
style: .default
) { action in
self.lampImg.image = self.imgOn
self.isLampOn = true
}
// "네, 제거합니다" → 전구 제거 이미지로 변경
let removeAction = UIAlertAction(
title: "네, 제거합니다.",
style: .destructive // destructive: 위험/삭제 의미로 빨간색 표시
) { action in
self.lampImg.image = self.imgRemove
self.isLampOn = false
}
// 액션 버튼들 추가
lampRemoveAlert.addAction(offAction)
lampRemoveAlert.addAction(onAction)
lampRemoveAlert.addAction(removeAction)
// 알림창 표시
present(lampRemoveAlert, animated: true, completion: nil)
}
}
- 6장 실습소스, AlertController


- 위경도 정보를 선택하는 곳.

- 버튼 여러 개가 아니라 세그멘티드 컨트롤

- 한 화면에서 여러 사진을 보여줄 수 있는 페이지 컨트롤

여러 개의 화면을 갖고 있는 경우 탭 바 컨트롤러를 사용한다.
(내부 파일도 ViewController, ImageViewController, DataViewController등 다양하게 구성가능)

- 어떤 화면에서 페이지를 왔다 갔다 할 때 ㅅ사용


'공부 > iOS' 카테고리의 다른 글
| iOS 프로그래밍 12주차 (0) | 2025.11.19 |
|---|---|
| iOS 프로그래밍 11주차 (0) | 2025.11.11 |
| iOS 프로그래밍 9주차 (0) | 2025.10.28 |
| iOS 프로그래밍 7주차 (0) | 2025.10.14 |
| iOS 프로그래밍 5주차 (0) | 2025.09.30 |