Ch 03. 계산기 앱 만들기

1 분 소요

Simulator Screen Shot - iPhone 11 Pro - 2022-04-05 at 16 30 27

기능 상세:
  • 계산기 키패드 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들의 센터와 센터간의 길이를 동일하게 맞춤
    • 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 Or sender.currentTitle 으로 대체

추가할 기술:
  • 가로모드시 operation 추가
  • 한 character 삭제할 수 있는 clear 구현

카테고리:

업데이트: