본문 바로가기

iOS/정대리_아이폰 앱개발 뽀개기 씨리즈

[iOS][정대리] 유튜브 인강_조건문

7_조건문

소스코드

import UIKit

class MainViewController: UIViewController {


    // 제목(선언과 동시에 정의)
    var titleLabel: UILabel = {
        // UILabel을 가져와서 안에 속성값(text 등)을 정의한 뒤 return 해준다 라는 역할 수행
        let label = UILabel()
        label.text = "메인화면"
        label.textAlignment = .center
        label.font = UIFont.boldSystemFont(ofSize: 50)
        label.textColor = .white
        return label
    }()

    // 버튼생성, let : 상수로 정의
    let changeBtn : UIButton = {
        // system으로했을 때 효과가 나타남
        let btn = UIButton(type: .system)
        // for : .normal -> 일반적일 때(그냥이벤트없이 처음 화면출력될때)
        btn.setTitle("배경색바꾸기", for : .normal)
        btn.setTitleColor(.black, for : .normal)
        btn.titleLabel?.font = UIFont.boldSystemFont(ofSize: 20)
        btn.backgroundColor = UIColor.white
        // 버튼의 각 모서리를 둥글게
        btn.layer.cornerRadius = 5
        // 버튼안에 글자의 간격조정
        btn.contentEdgeInsets = UIEdgeInsets(top: 5, left: 20, bottom: 5, right: 20)
        btn.addTarget(self, action: #selector(changeBg), for: .touchUpInside)

        return btn
    }()

    // ':' 는 해당 변수의 자료형선언
    var isBgOrange : Bool?

    // 뷰가생성되었을 때 아래 실행
    // View가 생성되었을 때 실행 메소드 override하여 재정의 한다.
    override func viewDidLoad() {

        // UIViewController가 가지고있는 viewDidLoad 로직을 그대로 사용하겠다.
        super.viewDidLoad()

        isBgOrange = true

        // 여기서 지정하는 view는 스토리보드로 따졌을 때 가장 최상위의 view를 의미한다(캡처추가)
        view.backgroundColor = #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1)

        // 뷰 추가생성 -> 최상위 view안에는 또 새로운 view가 추가적으로 생성될 수 있다.
        view.addSubview(titleLabel)

        // 타이틀 레이블의 위치를 정해주어야한다(기존 스토리보드의 경우 제약을 두어 가운데 위치)
        titleLabel.translatesAutoresizingMaskIntoConstraints = false
        // 타이틀레이블의 제약사항을 추가하며 상위 view의 Y축센터의 가운데와 일치되도록
        titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true

        // 뷰 추가생성 : changeBtn
        view.addSubview(changeBtn)

        // 버튼이 "메인화면" 이라는 글자아래 (1)간격을 유지하고, (2)가운데위치 하도록 정의
        changeBtn.translatesAutoresizingMaskIntoConstraints = false
        changeBtn.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 20).isActive = true
        changeBtn.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    }

    @objc fileprivate func changeBg() {
        print("MainViewController - changeBG() called")

        if isBgOrange == true {

            view.backgroundColor = #colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)
            isBgOrange = false

        } else {

            view.backgroundColor = #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1)
            isBgOrange = true
        }

        // '\(isBgOrange)' -> print문 안에 표현할 값
        print("MainViewController - changeBG() called . isBgOrange : \(isBgOrange)")
    }

}

메모

화면의 가운데 "메인화면" 글씨 표현부분

  • UILabel을 선언하고 속성값을 정의한뒤 그 변수를 반환한다
  • // 제목(선언과 동시에 정의) var titleLabel: UILabel = { // UILabel을 가져와서 안에 속성값(text 등)을 정의한 뒤 return 해준다 라는 역할 수행 let label = UILabel() label.text = "메인화면" label.textAlignment = .center label.font = UIFont.boldSystemFont(ofSize: 50) label.textColor = .white return label }()

'let' 상수 선언

  • 여기서도 Button을 생성하는데 선언과 동시에 속성 정의
  • 'for : .normal' 일반적인 화면출력시
  • ... 
    let changeBtn : UIButton = { // for : .normal -> 일반적일 때(그냥이벤트없이 처음 화면출력될때) 
      btn.setTitle("배경색바꾸기", for : .normal) 
      btn.setTitleColor(.black, for : .normal) 
      return btn 
    }() 
    ...

override func viewDidLoad()

  • 뷰 생성 될 시 아래 함수 실행, 부모클래스 UIViewController의 viewDidLoad를 재정의(override)
  • ... 
    override func viewDidLoad() { // UIViewController가 가지고있는 viewDidLoad 로직을 그대로 사용하겠다. 
    super.viewDidLoad("메인화면") 
    ...
  • view.backgroundColor = ...
    • 여기서의 view란 스토리보드에서 보는것처럼 최상위 view를 뜻함 그러므로 최상위 뷰의 배경색을 변경
  • view.addSubview(titleLabel) , constraint
    • 뷰를 추가생성한다. 스토리보드를 보면 view밑에 서브뷰가 있음이 보이는데 위에 내용이 이렇다
    • 위에서 정의한 titleLabel(를 서브 뷰로 삽입
    • 또한 스토리보드를 보면 constraint를 걸어두어 화면의 가운데에 위치하도록한다.
  • view.addSubview(changeBtn)
    • 뷰 추가생성222 , 메인화면 이라는 문구 밑에 버튼생성
      ```