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
는 컴공과 학생이라면 지겹도록 들었을, override
와 overload
의 그 오버라이드가 맞다.
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
}
}
내일은 계산기 알고리즘을 만들어서 계산기 어플을 완성하는게 목표다.