728x90
오토 레이아웃은 UI 요소의 위치와 크기를 제어하는 시스템입니다. 이를 통해 다양한 화면 크기와 방향에 맞춰 UI를 동적으로 조정할 수 있습니다.
outlet 연결
View Controller에서 연결확인
BMI 계산 소스
버튼을 누르면 콘솔창에 출력
강제 언래핑함-> 텍스트필드에 값을 안 넣은 경우 에러가 발생
옵셔널을 두 번 푸는 이유
? 생성자는 옵셔널형으로 나오기 때문
키, 체중 값을 안넣은 경우 앱이 종료되지 않게 조건문을 추가
소스 정렬하는 단축키
결과창 모서리 깎기
//
// ViewController.swift
// BMI_kgw
//
// Created by 소프트웨어컴퓨터 on 2024/11/13.
//
import UIKit
class ViewController: UIViewController {
// UI 요소에 대한 아울렛 연결
@IBOutlet weak var txtHeight: UITextField! // 키 입력 필드
@IBOutlet weak var txtWeight: UITextField! // 체중 입력 필드
@IBOutlet weak var lblResult: UILabel! // 결과 출력 라벨
override func viewDidLoad() {
super.viewDidLoad()
// 뷰가 로드된 후 추가 설정을 할 수 있는 곳
}
// BMI 계산 버튼이 눌렸을 때 호출되는 액션 메서드
@IBAction func calcBmi(_ sender: UIButton) {
// 입력 필드가 비어 있는지 확인
if txtWeight.text == "" || txtHeight.text == "" {
lblResult.textColor = .red // 텍스트 색상을 빨간색으로 변경
lblResult.text = "키와 체중을 입력하세요" // 오류 메시지 표시
return // 메서드 종료
} else {
// 입력된 체중과 키를 Double로 변환
let weight = Double(txtWeight.text!)!
let height = Double(txtHeight.text!)!
// BMI 계산 (kg/m²) - height는 cm 단위로 입력된다고 가정
let bmi = weight / (height * height * 0.0001) // kg/m*m
let shortenedBmi = String(format: "%.1f", bmi) // 소수점 1자리로 포맷팅
var body = "" // BMI 판정 결과를 저장할 변수
var color = UIColor.white // 배경색을 저장할 변수
// BMI에 따라 판정 및 배경색 설정
if bmi >= 40 {
color = UIColor(displayP3Red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) // 3단계 비만: 빨간색
body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
color = UIColor(displayP3Red: 0.7, green: 0.0, blue: 0.0, alpha: 1.0) // 2단계 비만: 주황색
body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
color = UIColor(displayP3Red: 0.4, green: 0.0, blue: 0.0, alpha: 1.0) // 1단계 비만: 노란색
body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
color = UIColor(displayP3Red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0) // 정상: 파란색
body = "정상"
} else {
color = UIColor(displayP3Red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0) // 저체중: 초록색
body = "저체중"
}
// 결과 라벨 업데이트
lblResult.backgroundColor = color // 배경색 설정
lblResult.text = "BMI:\(shortenedBmi), 판정:\(body)" // BMI와 판정 결과 표시
lblResult.clipsToBounds = true // 라벨의 경계가 곡선으로 잘리도록 설정
lblResult.layer.cornerRadius = 10 // 라벨의 모서리를 둥글게 설정
}
}
}
tab bar
view controllers 선택