[iOS 어플만들기] 계산기 만들기 도전 1일차

정환우·2020년 12월 30일
0

iOS

목록 보기
3/24
post-thumbnail

Auto Layout 강의를 수강하고 있는데, 첫 번째 실습과정이 계산기다. 여기서는 레이아웃을 꾸미는 방법과 ui요소들을 코드에 끌어다 쓰는 방법등을 알려준다. 즉 화면 만드는 법을 알려준다.

결국 계산기 만드는 코드는 100프로 내 힘으로 해야한다...

함수들

프로젝트의 ViewController.siwft 파일을 들여다 보면 기본적으로 이렇게 되어 있다.

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() { 
 super.viewDidLoad()
        // Do any additional setup after loading the view.
        }

}

// 그리고 기본 내용 말고 내가 추가로 사용한 함수
override func viewDidAppear(_ animated: Bool) {

}

처음이니까 코드를 분석해보았다.

클래스

ViewController라는 클래스가 선언되어 있는데, UIViewController라는 클래스를 상속받는 클래스이다.

그리고 클래스안에 override func viewDidLoad() 라는 함수가 정의되어 있는데, 하나 하나 분석해보면
override는 컴공과 학생이라면 지겹도록 들었을, overrideoverload의 그 오버라이드가 맞다.


Overload : 같은 이름의 여러 개의 메소드를 가지면서 매개변수의 유형과 개수를 다르게 하는 것.
Override : 상위 클래스가 갖고 있는 메소드를 하위 클래스가 재정의하여 사용하는 것.

그리고 함수안을 들여다보면 super.viewDidLoad()가 있는데, 스위프트에서는 상위 클래스를 super, 하위 클래스를 self라고 한다.
따라서 상위 클래스의 viewDidLoad()함수를 호출 하는 것.
상위 클래스의 함수가 무엇인지는 모르겠으나
결과적으로는 viewDidLoad()함수는 화면이 처음 실행될 때 실행되는 코드들이라고 이해하면 된다!

그리고 아래에 있는 viewDidApper()함수는 객체들이 나타나고 나면 실행되는 함수다. 그렇다고 사용자한테 객체가 변하는게 눈에 보이는 건 아니다.

그러니까 두 함수의 차이는

viewdidload()는 객체들이 display되기 전에 먼저 실행이 되는거고, viewdidapper()는 객체들이 display되고 나서 실행이 되는 것. viewdidload() 를 사용하여 객체들의 속성을 초기화하면 (width, height 값을 설정하는 것)은 부정확함. 원하는 모양이 안나올 수 있다.

그리고 나머지 배운 객체들의 속성 바꾸는 몇가지 함수들. 코드 안에 주석으로 설명이 되어 있으므로 따로 설명을 작성하지 않겠습니다!

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var displayLabel: UILabel!
    @IBOutlet weak var btn1: UIButton!
    @IBOutlet weak var btn2: UIButton!
    @IBOutlet weak var btn3: UIButton!
    @IBOutlet weak var btn4: UIButton!
    @IBOutlet weak var btn5: UIButton!
    @IBOutlet weak var btn6: UIButton!
    @IBOutlet weak var btn7: UIButton!
    @IBOutlet weak var btn8: UIButton!
    @IBOutlet weak var btn9: UIButton!
    @IBOutlet weak var btn10: UIButton!
    @IBOutlet weak var btn11: UIButton!
    
    override func viewDidLoad() {   // 화면이 처음 실행될 때 실행되는 코드들.
        
        displayLabel.layer.cornerRadius = 20    // 라벨의 모서리 둥글게 만드는 코드.
        displayLabel.layer.masksToBounds = true // Label은 masktobounds 코드가 기본적으로 False이기 떄문에 이 코드 없이 사용하면 둥글게 표시가 안됨.
        displayLabel.clipsToBounds = true   // maskstobounds랑 거의 비슷. 편한거 사용하자.
        
        btn1.layer.cornerRadius = 20    // 버튼은 노상관.
        btn1.layer.cornerRadius = btn1.bounds.width / 2 // 원래 가로길이의 반 값을 사용하면 원으로 표현하게되는 것.
        
        
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        btn1.layer.cornerRadius = btn1.bounds.width / 2
        btn2.layer.cornerRadius = btn1.bounds.width / 2
        btn3.layer.cornerRadius = btn1.bounds.width / 2
        btn4.layer.cornerRadius = btn1.bounds.width / 2
        btn5.layer.cornerRadius = btn1.bounds.width / 2
        btn6.layer.cornerRadius = btn1.bounds.width / 2
        btn7.layer.cornerRadius = btn1.bounds.width / 2
        btn8.layer.cornerRadius = btn1.bounds.width / 2
        btn9.layer.cornerRadius = btn1.bounds.width / 2
        btn10.layer.cornerRadius = btn1.bounds.height / 2
        btn11.layer.cornerRadius = btn1.bounds.width / 2
    }
}

내일은 계산기 알고리즘을 만들어서 계산기 어플을 완성하는게 목표다.

0개의 댓글