[BMI계산기2] ViewController에서 SubView UI 만들기

Lena·2022년 1월 11일
0

iOS앱개발 입문기

목록 보기
15/17

지금까지 스토리보드에서 라이브러리를 통해 label을 불러왔지만 오늘은 ViewController에서 UI를 만들어보자.

Multi-Screen 만들기

  • Multi Screen의 두 번째 화면이 될 것이므로 Controller에서 우클릭 한 후 새로운 Swift file을 생성해 SecondViewController만든다
  • UIKit 프레임워크를 import 해주고
  • SecondViewController 클래스를 만든다
  • 클래스 안에 viewDidLoad() 오버라이드 함수를 만들어준다.
import UIKit // UIKit가 Foundation을 포함함

class SecondViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()

    }
}
  • 새로운 label을 만든다.

사이즈 조절하기

  • 아직 사이즈 정보가 없으므로 사이즈를 조정해보자. frame property를 이용하면 label의 사이즈와 위치를 조정할 수 있다. 선언방법은 다음과 같다.
        label.frame = CGRect(x: 0, y: 0, width: 100, height: 50)

subview

  • parent view에 subview를 추가해보자.
    storyboard에서는 라이브러리에서 View Controller를 추가하였다.
  • 마찬가지로 view.addSubview(view: UIView)를 통해 sub view를 만들 수 있다.
  • 배경화면 색도 바꿔야겠지
    view.backgroundColor = UIColor.red
  • 이제 calculate 버튼을 누르면 SecondView가뜨도록 해보자.
    ViewController에서 만들어놓은 calculatePressed() 함수에서 다음을 추가한다.
        let secondVC = SecondViewController()
        self.present(secondVC, animated: true, completion: nil)

BMI 계산값을 subview에서 확인하도록 하기

  • subview에서 bmiValue를 초기화한다.
    var bmiValue = "0.0"
  • parent view에서 bmiValue값에 계산한 bmi값을 넣어준다.
    secondVC.bmiValue = String(format:"%.1f", bmi)

전체 코드

  • ViewController
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var heightLabel: UILabel!
    @IBOutlet weak var weightLabel: UILabel!
    
    @IBOutlet weak var heightSlider: UISlider!
    @IBOutlet weak var weightSlider: UISlider!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }


    @IBAction func heightSliderChanged(_ sender: UISlider) {
        let height = String(format: "%.2f",  sender.value)
        
        heightLabel.text = "\(height)m"
    }
    
 
    @IBAction func weightSliderChanged(_ sender: UISlider) {
        let weight = String(Int(sender.value))
        
        weightLabel.text = "\(weight)kg"
    }
    
    @IBAction func calculatePressed(_ sender: UIButton) {
        
        let height = heightSlider.value
        // heightSlider의 property 중 value 값
        
        let weight = weightSlider.value
        // weightSlider의 property 중 value 값
        
        let bmi = weight / pow(height, 2)
        // let bmi = weight / (height * height) 와 동일함
                
        let secondVC = SecondViewController()
        
        secondVC.bmiValue = String(format:"%.1f", bmi)
        
        self.present(secondVC, animated: true, completion: nil)
	}    
    }
  • SecondViewController
import UIKit // UIKit가 Foundation을 포함함

class SecondViewController: UIViewController {
    
    var bmiValue = "0.0" // label에서 사용해주기 위해 전역에 초기화 한 것
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .red
        
        let label = UILabel()
        label.text = bmiValue
        
        // 아직 사이즈가 없다
        // 사이즈를 만들기 위해 프레임 property
        
        label.frame = CGRect(x: 0, y: 0, width: 100, height: 50)
        //CGRect : Cool Graphics Rectangle
        
        view.addSubview(label)
    }
}

0개의 댓글