MINRYUL
류링류링
MINRYUL
전체 방문자
오늘
어제
  • 분류 전체보기
    • Swift
      • 학습
    • iOS
      • Toy-Project
      • 학습
      • Metal
    • CS
    • TIL

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • urlsession
  • RxSwift
  • Existential any
  • WWDC 2024
  • RxCocoa
  • static framework
  • TableView Cell
  • ViewStore
  • METAL
  • dynamic frameworkm
  • Clean Architecture
  • some
  • configuration_bulid_dir
  • opaque type
  • Existential type
  • TDD
  • RxNimble
  • RxTest
  • BDD
  • AttributeText
  • CollectionView Cell
  • ios
  • tuist
  • Swift
  • collectionView
  • Any
  • WWDC
  • Custom Calendar
  • demangle
  • Protocol

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
MINRYUL

류링류링

iOS/학습

iOS에서의 Frame vs Bounds

2022. 4. 24. 16:53

 

Frame : Super View 좌표계에서 View의 위치와 크기를 나타낸다.

(여기서 Super View는 현재 View에서 한 칸 윗 계층 View를 일컫는 것이다.)

  • Frame의 origin(x, y)
    • frame이 나타내는 origin(x, y) 좌표는 Super View의 원점을 (0, 0)으로 놓고 원점으로부터 얼마나 떨어져 있는지를 나타내는 것.
    • Super View의 원점이 곧 좌표의 시작점(0, 0)이 되는 것. 따라서 Super View의 좌표계에서 나타낸단 표현이 된다.
    • SuperView의 원점으로부터 얼마 만큼 떨어져 있는가.
  • Frame의 size(width, height)
    • View 영역을 모두 감싸는 사각형으로 나타낸 것.
    • 따라서 frame의 size는 View 자체의 크기가 아닌, View가 차지하는 영역을 감싸서 만든 사각형이 바로 frame의 size이다.
    • 그렇기 때문에 frame의 size가 변경된다면 frame의 origin 값 또한 변경될 수 있다. → 이것이 frame의 속성.

 

Bounds : 자신의 좌표계에서 View의 위치와 크기를 나타낸다.

  • bounds의 origin(x, y)
    • bounds의 좌표계는 frame과 달리 Super View와는 아무 상관없으며 기준은 자기 자신.
    • 자신의 원점을 (0, 0)으로 놓는다. → 좌표의 시작점을 자기의 원점으로 놓는다는 소리.
    • 때문에 View를 처음 생성하면 bounds의 origin은 무조건 (0, 0)으로 초기화되어 있다.
    • bounds를 바꿔줘야 하는 경우(ex → ScrollView의 ContentOffset)
  • bounds의 size(width, height)
    • bounds의 size는 View 자체의 영역을 나타낸다.
    • 따라서 Frame의 size와는 다르게 bounds의 size는 회전시킨다고 크기가 바뀌지는 않는다.
    • 결과적으로 bounds의 origin은 변하지 않는다.
    • 왜냐하면 bounds는 시작점이 자신의 원점이기 때문에 View가 회전하든 안하든 자신의 원점이 곧 좌표의 시작점이기 때문이다.

origin(x, y) 기준점

  • frame: Super View의 좌표계
  • bounds: 자신의 좌표계

size(width, height) 기준

  • frame: View 영역을 모두 감싸는 사각형
  • bounds: View 영역 자체

 

Frame를 사용할 때

  • frame은 UIView의 위치, 크기를 나타낼 때 사용한다.
  • 위치(origin)은 Super View 좌표계에서 나타내며, 크기(Size)는 View 영역을 모두 감싸는 사각형의 크기.
  • 이러한 성질 때문에 frame은 UIView의 위치 및 크기를 설정할 때 사용한다.
  • ex) let myView: UIView = .init(frame: .init(x: 100, y: 100, width: 100, height: 100))

 

Bounds를 사용할 때

  • Bounds 또한 UIView의 위치, 크기를 나타날 때 사용한다.
  • 위치(origin)는 자신의 좌표계에서 나타내며, 크기(size)는 View 영역 자체의 size이다.
  • 첫 번째로 View를 회전(transfomation) 한 후 View의 실제 크기를 알고 싶을 때 사용한다.
  • 두 번째로 View 내부에 그림을 그릴 때(drawRect) 사용한다.
  • 세 번째로 ScrollView에서 스크롤을 할 때 사용된다. (viewport가 바뀌는 것.)
    • 스크롤하는 동작 자체라 ScrollView의 Bounds를 바꿔주는 것. → ScrollView의 SubView 중 어디를 보여줄지 정하는 것.
    • open var contentOffset: CGPoint → ScrollView의 Bounds를 설정하는 값.

 

사용 용도

frame: View의 위치와 크기를 나타낼 때.

bounds: View를 회전한 후 Vie의 실제 크기를 알고 싶을 때, View 내부에 그림을 그릴 때(drawRect), ScrollView에서 스크롤 할 때

'iOS > 학습' 카테고리의 다른 글

iOS View 에서의 init 함수들  (0) 2022.05.08
iOS RxDataSource로 Custom Xib CalendarView 만들기  (0) 2022.05.07
Storyboard 에서 Generic Type 의존성 주입하기  (0) 2022.03.20
translatesAutoresizingMaskIntoConstraints  (0) 2022.02.13
Diffable DataSource Infinite Scroll  (0) 2022.01.24
    'iOS/학습' 카테고리의 다른 글
    • iOS View 에서의 init 함수들
    • iOS RxDataSource로 Custom Xib CalendarView 만들기
    • Storyboard 에서 Generic Type 의존성 주입하기
    • translatesAutoresizingMaskIntoConstraints
    MINRYUL
    MINRYUL
    열심히 살자

    티스토리툴바