CGRect, CGSize, CGPoint에 대하여

2022. 4. 28. 12:34iOS 프레임워크

최근 UI의 작동방식에 관심이 많아져 다시 기초부터 공부하게 되었습니다.

PinLayout과 FlexLayout 같은 외부 서드파티 라이브러리를 활용한 UI에 관심을 가지고 찾아보고 있었는데, 확실히 기존에 사용하던 오토 레이아웃과는 다른 개념이었어요... 이것도 기회가 된다면 나중에 한번 정리를 해보도록 할게요!

 

 

로딩 속도가 어마 무시하게 빠른 녀석들입니다 후들후들...

https://github.com/layoutBox/PinLayout

 

GitHub - layoutBox/PinLayout: Fast Swift Views layouting without auto layout. No magic, pure code, full control and blazing fast

Fast Swift Views layouting without auto layout. No magic, pure code, full control and blazing fast. Concise syntax, intuitive, readable & chainable. [iOS/macOS/tvOS/CALayer] - GitHub - layoutBo...

github.com

https://github.com/layoutBox/FlexLayout

 

GitHub - layoutBox/FlexLayout: FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementati

FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementation. Concise, intuitive & chainable syntax. - GitHub - layoutBox/FlexLayout: FlexLayout adds a ni...

github.com

 

그렇게 기초부터 다시 공부하던 중 CGRect와 CGSize를 다룰 일이 많아져서 정리를 해보려고 합니다.

 

일단 먼저 기본이 되는 CGPoint에 대해서 설명을 드릴게요!

역시 근본은 애플 개발자 문서가 아닐까요?

CGPoint는 2차원 좌표 시스템의 점을 포함하는 구조체라고 나와있어요

정말 간단하게 생각해보자면 함수의 x좌표, y좌표로 생각하시면 될 것 같아요!

프레임 워크를 따라 들어가 보았더니 CGFloat값을 x와 y값으로 받는 단순한 구조체로 이루어져 있는 것을 확인할 수 있었습니다.

 

평소에 많이 보던 zero도 보이네요. 괜히 반가운 느낌 ㅎㅎ

UIView를 생성할 때. zero를 많이 사용했는데, (0, 0)을 나타내고 있네요.

 

그다음으로 볼 것은 CGSize입니다!

넓이와 높이를 포함하는 구조체라고 설명이 되어있네요

프레임워크에서도 확인할 수 있었습니다.

 

그래서 이 2개를 왜 알아봤냐!

바로 CGRect의 init에 필요하기 때문입니다.

아마도 오늘의 핵심일 것 같은데, 한번 확인해볼게요.

사각형의 위치와 크기를 포함하는 구조체라고 나와있습니다.

origin이라는 것과 size를 인자로 받습니다.

size는 크기를 뜻하는 것은 알겠는데, origin은 왜 받을까요?

그것은 CGRect가 위치를 포함하는 구조체이기 때문입니다.

크기는 알았는데, 어디에 얼마만큼 그려야 할지도 같이 알려줘야겠죠.

 

UIView를 그릴 때 가끔씩 init에 frame으로 CGRect를 받는 경우를 가끔씩 보셨을 거예요.

거기서 .zero를 많이 썼는데, 이것은 origin과 size를 전부 (0, 0) (0, 0)으로 만들어주겠단 뜻입니다!

그런데 .zero를 쓰면 화면에 보이지 않을 텐데, 어떻게 화면에 나타나는지에 대해서도 의문을 가지게 되었습니다.

 

아마 평상시 쓰는 오토 레이아웃이 CGRect에 직접 관여를 하는 것 같은데, 이 부분에 대해서는 조금 더 공부 후 찾아오도록 할게요!

'iOS 프레임워크' 카테고리의 다른 글

SwiftUI - 조심스러운 첫 걸음  (0) 2023.11.30
NSLock  (0) 2022.05.25
Core Animation Pipeline  (0) 2022.05.24
CADisplayLink  (2) 2022.05.23
UI작업이 Main Thread에서 이뤄져야 하는 이유  (0) 2022.05.20