티스토리 뷰
- 뷰의 위치 다루기
- 프레임
- 컨스트레인트
- 여러 화면
- 뷰 컨트롤러(UIViewController)를 나타내는 방법(Present)
- 내비게이션 컨트롤러(UINavigationController)로 화면 전환하는 방법
- Swift 문법 - 상속과 클로져 (closure)
iOS에서 뷰의 위치를 다루는 방법
1. 프레임
화면에서 뷰의 위치, 크기를 정하는 변수, 요소이다.
프레임은 위치 좌표 (X, Y)와 사이즈(너비, 높이)로 이루어진 사각형이다.

프레임 움직이기
@IBAction func moveButtonClicked(_ sender: Any) {
self.imageView.frame = CGRect(x: 20, y: 200, width: 237, height: 235)
}
뷰에서는 상위 뷰와 하위 뷰 개념이 있고, 하위 뷰에서 프레임 (0,0)의 기준은 바로 위의 상위 뷰의 가장 왼쪽 상단을 의미한다.

@IBAction func buttonClicked(_ sender: Any) {
var view1 = UIView(frame: CGRect(x: 20, y: 100, width: 200, height: 200))
view1.backgroundColor = UIColor.black
self.view.addSubview(view1)
var view2 = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)
view2.backgroundColor = UIColor.red
view1.addSubview(view2)
}
** UIView.transition / UIView.animate ⇒ 나중에 애니메이션 필요시, 찾아볼 것.
2. 컨스트레인트
폰의 사이즈가 바뀌면, 뷰들의 위치가 이상해지는 것을 볼 수 있었다.
프레임은 화면에서의 위치와 사이즈를 결정하는데 화면 사이즈가 제각각이라면 프레임을 어떻게 넣어야 할지?
→ 폰의 사이즈가 바뀌면 어떻게 바뀌면 좋겠다. 룰 같은 것. 뷰의 위치와 사이즈에 대한 규칙을 정하는 것이다. (constraint)
→ safe area기준으로 위에서 얼마 뛰우겠다 x, y, width, height
여러 번 시도해보면서 감을 익히는 게 좋을 것 같다.
![]() |
![]() |
![]() |
![]() |
여러 화면 다뤄보기
iOS에서 화면의 기본 단위는 뷰 컨트롤러(UIViewController)이다. 뷰를 컨트롤하는 더 큰 개념이라고 생각.
1. 뷰 컨트롤러(UIViewController)를 나타내는 방법(Present)
→ View Controller 추가
→ 화면을 연결하고 싶을 때는 컨트롤 버튼을 누른 채로 두 번째 화면과 연결하면 된다. (Action Segue에서 Present Modally 선택)
→ 화면 표시 방법 (Presentation Style)과 transition 스타일 설정 변경 가능하다.

2. 내비게이션 컨트롤러(UINavigationController)로 화면 전환하는 방법
내비게이션 컨트롤러는 화면 전환을 관리해주는 UIViewController의 일종이다.
→ Navigation Controller 추가 (내비게이션 컨트롤러를 추가하면 자동으로 테이블 뷰 컨트롤러를 추가해준다.) → Static Cells 선택 (나중에 동적으로 추가할 시에는 Dynamic Prototypes)

→ 화면 연결 시에는 컨트롤을 누르고 테이블뷰 셀 드래그해서 연결하면 된다. (Selection Segue에서 Show 선택)
** Table View에는 Section과 Cell 이 있는데, 일반 사진을 참고하면 된다. row 하나하나가 cell 이 되고, cell 모여있는 걸 section.
![]() |
![]() |
![]() |
** 첫 화면이 되도록 만들고 싶다면 Storyboard Entry Point를 원하는 컨트롤러로 옮기면 된다.
** custom class 유의.
Swift문법
1. 상속 (inheritance)
UIViewController를 상속받아서 클래스를 만들면, 기본적으로 UIViewController가 동작하는 방법 그대로 동작한다. 여기에서 우리가 원하는 대로 약간의 기능을 추가하거나 고칠 수 있음.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() { // override를 앞에 붙인다.
super.viewDidLoad() // 상위클래스의 viewDidLoad 함수를 호출한다는 의미.
self.view.backgroundColor = UIColor.blue // 배경화면이 파란색.
}
}
→ 상속은 구조체 말고 클래스끼리만 상속이 가능하다.
→ 상위 클래스의 함수를 수정하는 것을 override라고 하고, 해당 함수 앞에 override라고 써야 한다.
→ 한 클래스는 하나의 클래스만 상속이 가능하다.
** UIButton, UIImageView, UILabel, UISwitch 등등.. 모두 UIView를 상속받는다.
** UITableViewController, UINavigationController도 UIViewController를 상속받는다.
2. 클로져 (closure)
다른 함수를 해당 함수에 변수로 집어넣는 방법.
함수가 클로저의 한 형태로, 이름 있는 클로저라고 한다.
UIView.animate(withDuration: 1, animations: () -> void)
{(인자) -> 반환타입 in 로직구현 }
** closure 안에서는 class안에 있는 변수를 사용하고 싶을 때, self를 붙여줘야 함. 그러나 그냥 안에서 선언한 경우에는 써주지 않아도 됨.
** 강의에서는 자세히 다루지 않아, 따로 찾아봐야 할 것 같다.
** UILabel을 여러 줄로 넣으려면, Lines 속성을 0으로 해준다.
** prepare 함수 : 다른 뷰 컨트롤러로 화면을 전환할 때 미리 데이터를 전달.
** segue의 destination이 ChichkenOutputViewController라면 그 controller의 numberOfPeople에 stepper 값을 전달해준다.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if var controller = segue.destination as? ChickenOutputViewController {
controller.numberOfPeople = Int(stepper.value)
}
}
뭔가 이렇게 내용을 정리하니 짧아보이긴 하지만, 다른 주차보다도 학습 시간이 조금 오래 걸렸다. 이것저것 시도해보고 어떻게 바뀌는지 확인을 하느라 더 오래 걸렸던 것 같다. 아직 클로져에 대한 개념이 감이 안 왔는데 따로 구글링 하는 시간을 따로 가져야겠다. 드디어, 여러 화면을 다룰 수 있게 되었다!! 4주 차는 api 연결해서 뿌려주는 학습이었는데, 다시 복습하면서 차근차근 살펴봐야겠다!
'study > iOS' 카테고리의 다른 글
| iOS 앱개발 기초반 2주차 복습 (0) | 2022.01.22 |
|---|---|
| iOS 앱개발 기초반 1주차 복습 (0) | 2022.01.22 |
- Total
- Today
- Yesterday
- 타입활용
- 내일배움카드
- 타입확장하기
- 개발자멘토
- 1시간만에끝내는직장인코딩용어해설
- homebrew
- 스파르타 코딩클럽
- 코딩
- 크롤링
- 스파르타코딩클럽후기
- 스파르타코딩클럽 #비전공자코딩 #아이디어 #개발자멘토 #르탄즈 1기
- iOS 앱개발 기초반
- 웹 스크래핑
- javascript
- Selenium
- 르탄즈1기
- 코딩교육
- 내일배움단
- mongodb
- 타입스크립트파일
- DOIT
- IOS
- 아이디어
- 공부하자...
- 타입스크립트
- 스파르타코딩클럽
- 우아한타입스크립트
- 개발일지
- 비전공자코딩
- ios앱개발
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |






