Ch 03. 계산기 앱 만들기
기능 상세:
- 계산기 키패드 UI를 구성
- 계산기를 통해 나누기, 곱하기, 빼기 더하기 연산
- 누적 연산
- AC 버튼을 누르면 계산 초기화
활용 기술:
- UIStackView
열 또는 행에 View들의 묶음을 배치할 수 있는 간소화된 인터페이스
AutoLayout을 이용하여 디바이스의 스크린 사이즈나 혹은 일어날 어떠한 변화에 맞춰서 동적인 UI구성
UIStackView Attribute
:서브 뷰 포지션 사이즈 조절- Axis: StackView의 방향 결정 (Vertical or Horizontal)
- Alignment: StackView의 subView들을 어떤식으로 정렬할 지 결정
- Fill: StackView의 방향에 따라 공간을 늘려 가득채움
- Top: Horizontal StackView에서 subView들이 StackView의 위로 정렬
- Center: StackView의 방향에 따라 subView의 센터를 StackView의 센터에 맞춰 정렬
- Bottom: Horizontal StackView에서 StackView의 아래에 맞춰 정렬
- Trailing: Vertical StackView에서 StackView의 오른쪽에 맞춰 정렬
- Leading: Vertical StackView에서 subView들이 StackView의 왼쪽 정렬
- First Baseline: subView들의 First Baseline에 맞춰 subView들을 정렬(Only Horizontal StackView)
- Last Baseline: subView들의 Last Baseline에 맞춰 subView들을 정렬(Only Horizontal StackView)
- Distribution: StackView 안에 들어가는 view들의 사이즈 분배
- Fill: StackView의 방향에 따라 가능한 공간을 채우기 위해 subView의 사이즈 재조정
( StackView안에 들어있는
subView가 StackView의 크기를 초과한다면 각 뷰의 Compression Resistance Priority에 따라 각 뷰의 크기를 감소,
subView가 StackView의 크기에 미달한다면 각 뷰의 Hugging Priorty에 따라 뷰의 크기 증가 ) - Fill Equally
- Fill Proportionally: StackView의 방향에 따라 subView가 갖고 있던 크기의 비례하여 공간을 차지
- Equal Spacing: stackview의 방향에 따라서 subView들 사이의 공간을 균등하게 배치
- Equal Centering: stackView의 방향에 따라서 각 subView들의 센터와 센터간의 길이를 동일하게 맞춤
- Fill: StackView의 방향에 따라 가능한 공간을 채우기 위해 subView의 사이즈 재조정
- Spacing
Stack View 안에 들어가는 뷰들의 간격을 조정
-
IBDesignables
컴파일 타임으로 적용된 속성을 실시간으로 Storyboard에 랜더링
※ 남용하게 되면 Storyboard를 열때마다 빌드가 돼서 버벅이거나 오류 발생 가능 - IBInspectable
커스텀한 UIView 컴포넌트에서 Inspector 창을 이용해 보다 쉽게 속성을 적용시킬 수 있도록 하는 속성
에러:
Conflicting constraints occur when AutoLayout cannot satisfy a particular set of constraints simultaneously.
- 버튼이 비율로 설정되어 화면의 해상도가 커질수록 버튼의 크기도 커져야 하는데 버튼의 크기가 커진만큼 버튼이 위치할 자리가 모자라서 발생한 제약조건 에러
- Bottom Space to Priority
- 다른 뷰들보다 Bottom Space 제약조건의 우선순위가 낮아져서, Vertical StackView 상황에 따라Bottom Space 가 늘어나거나 줄어듬
let letterString = sender.title(for: .normal)!
영상과 달리 nil 값을 반환
대신sender.titleLabel?.text
Orsender.currentTitle
으로 대체
추가할 기술:
- 가로모드시 operation 추가
- 한 character 삭제할 수 있는 clear 구현