Notice
Recent Posts
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
관리 메뉴

도슐랭스타

iOS - 12주차 본문

iOS

iOS - 12주차

도도.__. 2024. 11. 20. 16:49

iOS에서 오토레이아웃(Autolayout)은 사용자 인터페이스(UI)의 레이아웃을 자동으로 조정해주는 시스템.
이 시스템을 사용하면 화면 크기, 방향, 해상도 등 다양한 조건에 맞춰 뷰(View)의 위치와 크기를 자동으로 변경할 수 있음.

outlet 잡기

이런식으로 코드를 짜면 값이 nil일 때도 옵셔널을 풀어서 큰일이남.

if문을 사용하여 안전하게 수정함.

정렬은 여기서 하거나 [Ctrl] + [i] 하면 됨.

이렇게 좀 꾸밈.

//
//  ViewController.swift
//  BMI_kdh
//
//  Created by 1 on 2024/11/13.
//

import UIKit

class ViewController: UIViewController {
    
    // 텍스트 필드 (체중 입력)
    @IBOutlet weak var txtWeight: UITextField!
    
    // 텍스트 필드 (키 입력)
    @IBOutlet weak var txtHeight: UITextField!
    
    // BMI 계산 결과를 표시할 레이블
    @IBOutlet weak var lblResult: UILabel!
    
    // BMI 계산을 수행하는 함수
    @IBAction func calcBmi(_ sender: UIButton) {
        
        // 입력 필드가 비어있다면 경고 메시지를 출력
        if txtHeight.text == "" || txtWeight.text == "" {
            lblResult.textColor = .red // 텍스트 색상 빨간색으로 설정
            lblResult.text = "키와 체중을 입력하세요." // 경고 메시지
            return // 입력이 없으면 함수 종료
        } else {
            // 텍스트 필드에서 입력받은 값을 Double로 변환
            let weight = Double(txtWeight.text!)! // 체중 (kg)
            let height = Double(txtHeight.text!)! // 키 (cm)
            
            // BMI 계산 공식: kg / m² (cm를 m로 변환하기 위해 height * height * 0.0001 사용)
            let bmi = weight / (height * height * 0.0001)
            
            // 계산된 BMI 값을 소수점 첫째 자리까지 포맷팅
            let shortenedBmi = String(format: "%.1f", bmi)
            
            // BMI 판정을 위한 변수 선언
            var body = ""
            
            // 판정에 따른 색상 설정 변수
            var color = UIColor.white
            
            // BMI 값에 따라 판정 결과와 색상 변경
            if bmi >= 40 {
                // BMI가 40 이상이면 "3단계 비만" (빨간색)
                color = UIColor(displayP3Red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
                body = "3단계 비만"
            } else if bmi >= 30 && bmi < 40 {
                // BMI가 30 이상 40 미만이면 "2단계 비만" (주황색)
                color = UIColor(displayP3Red: 0.7, green: 0.0, blue: 0.0, alpha: 1.0)
                body = "2단계 비만"
            } else if bmi >= 25 && bmi < 30 {
                // BMI가 25 이상 30 미만이면 "1단계 비만" (다크레드 색상)
                color = UIColor(displayP3Red: 0.4, green: 0.0, blue: 0.0, alpha: 1.0)
                body = "1단계 비만"
            } else if bmi >= 18.5 && bmi < 25 {
                // BMI가 18.5 이상 25 미만이면 "정상" (파란색)
                color = UIColor(displayP3Red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0)
                body = "정상"
            } else {
                // BMI가 18.5 미만이면 "저체중" (초록색)
                color = UIColor(displayP3Red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0)
                body = "저체중"
            }
            
            // BMI 계산 값과 판정 결과 출력
            // print("BMI:\(shortenedBmi), 판정:\(body)")  // 필요에 따라 디버깅을 위해 출력
            
            // 레이블의 배경색을 계산된 색상으로 설정
            lblResult.backgroundColor = color
            
            // 레이블에 텍스트가 부드럽게 표시되도록 모서리를 둥글게 설정
            lblResult.clipsToBounds = true
            lblResult.layer.cornerRadius = 10
            
            // 레이블에 최종 BMI 값과 판정 결과를 표시
            lblResult.text = "BMI: \(shortenedBmi), 판정: \(body)"
        }
    }
    
    // 뷰가 로드될 때 호출되는 함수
    override func viewDidLoad() {
        super.viewDidLoad()
        // 추가적인 초기 설정이 필요하면 여기서 수행
    }
}

Tab Bar Controlloer

 

특징Manual SegueRelationship Segue

정의 사용자 또는 코드에서 직접 트리거되는 전환 UIViewController 간의 관계를 정의하는 자동 전환
트리거 코드에서 직접 호출 또는 특정 이벤트로 트리거 (예: 버튼 클릭) UIStoryboard에서 정의된 뷰 컨트롤러 간의 관계에 의해 자동 트리거
설정 위치 스토리보드에서 세그웨이 아이콘을 선택하고 "Action"을 설정 스토리보드에서 뷰 컨트롤러 간의 관계를 설정 (예: 부모-자식 관계)
사용 예시 버튼 클릭 시 다른 화면으로 이동, 특정 이벤트 발생 시 화면 전환 Tab Bar Controller, Navigation Controller의 하위 뷰 컨트롤러 간 관계
세그웨이 유형 "Show", "Present Modally", "Push", "Custom" 등 여러 유형의 세그웨이 사용 embed, contain, relationship 등 관계 기반 세그웨이 사용
코드에서 호출 performSegue(withIdentifier:) 메소드를 사용하여 호출 자동으로 연결된 뷰 컨트롤러 간에 관계가 성립되어 코드 호출 필요 없음
사용 예시 (스토리보드) 두 뷰 컨트롤러 사이에 드래그하여 세그웨이 연결 후, 트리거 설정 부모 뷰 컨트롤러에서 자식 뷰 컨트롤러를 Embed 세그웨이로 추가
비교적 복잡한 사용 코드에서 세그웨이 조건과 전환 동작을 제어할 수 있어 유연하지만 코드 작성 필요 자동화된 관계 설정으로 사용이 간편하지만 제어가 제한적
주요 목적 사용자 인터페이스 상의 특정 트리거에 의해 화면 전환을 처리 뷰 컨트롤러들 간의 관계(예: 네비게이션 스택, 탭 바, 부모-자식 관계)를 설정
사용법 코드에서 직접 세그웨이를 호출하고, 전환 방법을 설정 스토리보드에서 뷰 컨트롤러 간의 관계를 설정하고 자동으로 관리

 

 

 

반응형

'iOS' 카테고리의 다른 글

15  (0) 2024.12.11
iOS - 13주  (0) 2024.11.27
iOS-11주  (1) 2024.11.13
10주차  (1) 2024.11.06
iOS- 9주  (0) 2024.10.30
Comments