[iOS] 아이폰 BMI 앱 제작하기

2023. 11. 23. 00:57·Apple/iOS
목차
  1. 서론
  2. Object 배치
  3. 버튼 디자인 수정(라운드 값 넣기)
  4. Text Field - Keyboard Type : Decimal Pad
  5. 소스 작성
  6. 결과  창 색 바꾸기
  7. 마무리
728x90
반응형

서론

자! 이번 시간에는 저번 포스팅에 이어서 BMI 앱을 제작하는 과정에 대해서 포스팅을 해보려고 합니다.

저번 포스팅 내용이 궁금하신 분들은 여기를 참고해주세요!

 

그럼 바로 시작하겠습니다!

Object 배치

우선 Storyboard로 프로젝트 파일을 하나 만들어주시고 Main.storyboard로 들어가보면 아무것도 없는 빈 화면이 나올 텐데 아래 사진처럼 Label과 Button, TextField, ImageView를 배치해주세요!

 

버튼 디자인 수정(라운드 값 넣기)

근데 버튼이 너무 각져서 시각적으로 좀 별로니까 라운드를 좀 넣어보겠습니다.

 

라운드를 넣는 방법은 소스로 하는 방법과 identity inspector를 이용하는 방법 이렇게 2가지가 있는데 지금은 identity inspector으로 해보겠습니다.

 

버튼을 선택한 후 Identity Inspector를 클릭한 후 User Defined Runtime Attributes에서 +를 클릭해줍니다.

그리고 아래처럼 Key Path : layer.cornerRadius, Type : Number, Value : 7을 입력해줍니다.

(숫자가 높을수록 라운드가 더 강해집니다)

 

참고로 시뮬레이터를 돌려야 라운드 값이 들어간 것을 확인할 수 있습니다.

(canvas에서는 라운드가 들어간 게 안 보여요!)

Identity Inspector

만약 소스에서 변경하고 싶다면 button도 아웃렛을 만들어서

button.clipsToBounds = true
button.layer.cornerRadius = 0.5 * button.bounds.size.height

이렇게 입력해주세요!

Text Field - Keyboard Type : Decimal Pad

자 그리고 Height와 Weight를 입력할 때 그냥 키보드에서 숫자를 골라서 입력을 해도 크게 문제될 건 없지만 숫자만 들어가는 곳이니까 기왕이면 키보드에 숫자만 뜨는게 좋잖아요? 그러니까 설정을 살짝 넣어줍시다.

 

Text Field의 Keyboard Type을 Decimal Pad로 바꿔주겠습니다.

Text Field - Keyboard Type : Decimal Pad

소스 작성

이제 UI 부분은 마무리가 됐으니 소스를 작성해보겠습니다.

 

UI에 있는 TextField, Label, Button을 소스에 연결해주어야 합니다.

@IBOutlet weak var txtHeight: UITextField!

@IBOutlet weak var txtWeight: UITextField!

@IBOutlet weak var lblResult: UILabel!

@IBAction func calcBmi(_ sender: UIButton) {

}

이렇게 되도록 연결해주세요!

 

@IBAction func calcBmi(_ sender: UIButton) {
    let height = Double(txtHeight.text!)!
    let weight = Double(txtWeight.text!)!
    print(height,weight)
    let bmi = weight/(height*height*0.0001)
    let shortenedBmi = String(format: "%.1f", bmi)
    var body = ""
    if bmi >= 40 {
        body = "3단계 비만"
    } else if bmi >= 30 && bmi < 40 {
        body = "2단계 비만"
    } else if bmi >= 25 && bmi < 30 {
        body = "1단계 비만"
    } else if bmi >= 18.5 && bmi < 25 {
        body = "정상"
    } else {
        body = "저체중"
    }
    print("BMI:\(shortenedBmi), 판정:\(body)")
}

그리고 @IBAction func calcBmi(_ sender: UIButton) { }

이 소스의 중괄호 안에 위에처럼 소스를 채워주면 BMI 앱이 작동이 됩니다. 하지만 이 소스에는 문제점이 하나 있습니다.

 

바로 Height와 Weight 칸에 아무것도 입력을 안 하고 버튼을 누르면 앱으 크래쉬가 나면서 강제 종료 된다는 것입니다.

 

그 문제를 해결하기 위해서 소스를 조금 수정해보겠습니다.

저는 이렇게 수정해보았습니다.

 

자 이제 실행을 해보겠습니다.

 

실행 결과
실행 결과
값을 안 넣고 버튼을 누른 화면

결과  창 색 바꾸기

자 이대로 끝내도 되긴 하지만 저는 BMI 결과에 따라 결과 창의 색이 변하도록 소스를 조금 수정해봤습니다.

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var txtHeight: UITextField!
    @IBOutlet weak var txtWeight: UITextField!
    @IBOutlet weak var lblResult: UILabel!
    @IBAction func calcBmi(_ sender: UIButton) {
        if txtHeight.text == "" || txtWeight.text == "" {
            lblResult.textColor = .red
            lblResult.text = "키와 체중을 입력하세요!"
            return
        } else {
            let weight = Double(txtWeight.text!)!
            let height = Double(txtHeight.text!)!
            let bmi = weight / (height*height*0.0001) // kg/m*m
            let shortenedBmi = String(format: "%.1f", bmi)
            var body = ""
            var color = UIColor.white
            if bmi >= 40 {
                color = UIColor(displayP3Red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
                body = "3단계 비만"
            } else if bmi >= 30 && bmi < 40 {
                color = UIColor(displayP3Red: 0.7, green: 0.0, blue: 0.0, alpha: 1.0)
                body = "2단계 비만"
            } else if bmi >= 25 && bmi < 30 {
                color = UIColor(displayP3Red: 0.4, green: 0.0, blue: 0.0, alpha: 1.0)
                body = "1단계 비만"
            } else if bmi >= 18.5 && bmi < 25 {
                color = UIColor(displayP3Red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0)
                // color = UIColor.blue
                body = "정상"
            } else {
                color = UIColor(displayP3Red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0)
                body = "저체중"
            }
            print("BMI:\(shortenedBmi), 판정:\(body)")
            lblResult.backgroundColor = color
            lblResult.clipsToBounds = true
            lblResult.layer.cornerRadius = 10
            lblResult.text = " BMI:\(shortenedBmi), 판정:\(body) "
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
}

소스가 바뀐 게 보이죠? P3 색영역을 바탕으로 RGB값을 넣은 것입니다.

 

마무리

이렇게 BMI 앱을 한 번 제작해보았는데요! 혹시 만드는 과정 중에 이해가 안 되거나 헷갈리는 부분이 있다면 질문 남겨주세요!!

 

감사합니다.


틀린 부분이 있거나 더 좋은 내용 훈수 환영합니다!

공감과 댓글 부탁드립니다. 

728x90
반응형

'Apple > iOS' 카테고리의 다른 글

[iOS] Tab Bar Controller  (2) 2023.12.02
[iOS] 세그먼트 컨트롤 디자인  (0) 2023.12.01
[iOS] BMI 계산 소스와 판정 소스  (2) 2023.11.20
[iOS] Interface Builder - Attribute, UI elements  (0) 2023.11.19
[iOS] Date Picker  (0) 2023.11.18
  1. 서론
  2. Object 배치
  3. 버튼 디자인 수정(라운드 값 넣기)
  4. Text Field - Keyboard Type : Decimal Pad
  5. 소스 작성
  6. 결과  창 색 바꾸기
  7. 마무리
'Apple/iOS' 카테고리의 다른 글
  • [iOS] Tab Bar Controller
  • [iOS] 세그먼트 컨트롤 디자인
  • [iOS] BMI 계산 소스와 판정 소스
  • [iOS] Interface Builder - Attribute, UI elements
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록

P_Piano님의
글이 좋았다면 응원을 보내주세요!

응원하기
응원은 창작의 힘

이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.

카카오 계정으로 누구나

응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.

응원 댓글 강조

글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.

쉬운 결제

응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.

응원 수익은 창작자에게 큰 힘이 됩니다.
응원 금액
응원 댓글
  • 창작 활동에 대한 감사와 격려의 의미로 창작자를 응원합니다.
  • '응원하기'는 자발적 결제이므로 청약철회(환불) 불가능합니다.
  • '응원하기'는 만 14세 이상 인증 사용자만 이용할 수 있습니다. 만 19세 미만 미성년 회원의 경우, 법정대리인이 응원하기 결제 이용에 동의하지 않으면 미성년자 본인 또는 법정대리인이 그 결제 내용을 취소할 수 있습니다.
  • '응원하기' 이용을 위한 자세한 내용은 티스토리 이용약관 및 카카오 유료서비스 이용약관을 따릅니다.
(주) 카카오 대표이사 정신아
사업자 등록 번호 120-81-47521
통신판매업신고번호 제2015-제주아라-0032호
주소 제주특별자치도 제주시 첨단로 242(영평동)
호스팅사업자 (주)카카오
고객센터 1577-3754
이메일 help.notice@kakaocorp.com
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (201) N
      • Apple (119) N
        • iOS (22)
        • visionOS (4)
        • Swift (65) N
        • UIKit (2)
        • SwiftUI (20)
        • RxSwift (2)
        • Xcode (4)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ios
    swiftUI
    제어문
    프로퍼티 래퍼
    티스토리챌린지
    연산자
    combine
    UIKit
    클래스
    Optional
    변수
    배열
    옵셔널
    네트워크
    Initializers
    SWIFT
    디자인패턴
    자바스크립트
    비동기
    이니셜라이저
    Vision Pro
    함수
    운영체제
    프로세스
    Xcode
    visionOS
    오블완
    메서드
    코딩테스트
    스위프트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[iOS] 아이폰 BMI 앱 제작하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.