iOS/UIKit

frame vs bounds (4) [ 사용 용도 ]

Hamp 2024. 9. 2. 15:20
반응형

 

이번 학습은 frame과 bounds의 마지막시간인 도대체 언제 쓰면되는지 를 학습해보자.

 

frame

 

앞의 학습 내용으로 정리하면 frame의 origin(위치)는 superview 좌표계를
기준으로 한 view의 원점이고 size(크기)는 view 영역을 모두 감싸는 사각형의 크기이다.

 

그렇다면 이런 성질들은 어디에 쓰일까 ??

 

View의 위치와 크기를 설정할 때 사용한다.

 

단순히 View를 생성하는데 사용된다. 

 

let myView: UIView = .init(frame: ...)

 

 


bounds

앞의 학습 내용으로 정리하면 bounds의 origin(위치)는 자신의 좌표계를 나타내며
size(크기)는 View 영역 자체의 size이다.

 

오직 자신에게만 집중할 수 있어 사용되는 곳이 frame보다는 다양한데 하나씩 살펴보자.

 

1) view가 회전한 후에도 view의 실제 크기를 알고 싶을 때

 

frame vs bounds (2) [ 정의, 기준점, 크기 계산 방식]

extension UIView { open var frame: CGRect open var bounds: CGRect...} frame과 bounds는 이전 시간에 학습했던 CGRect 타입, 즉 좌표와 크기를 모두 갖고잇는 정보이다. 타입이 같다는건 공통점이 있다는 것이고, 저

hamp.tistory.com

 

아래 글에서 이미 확인 했으므로 별도 설명 없이 넘어가자.

 


 

2) view 내부에 그림을 그릴 때 사용된다.

정확한 설명은 아직 내부에서 draw관련 함수를 사용해 본적이 없어 힘들지만

 

단순히 생각했을 때 view 내부에서 그리는데 superview의 좌표계는 불필요하기 때문에 frame보다는

bounds가 더 적절한 것 같다.

 


 

3)  UIScrollView에서 스크롤 시 사용된다.

이전 학습 내용을 통해 우리는 bounds를 옮기는 의미가 무엇인지 정확히 알고있다.

 

보이는 viewport의 좌표를 옮기는 것 그렇다면 UIScrollview에 이 특징이 어떻게 이용되고 있을까??

 

보통 scroll은 현재 보여지는 화면보다 많은 데이터가 존재할 때 사용한다.

 

그렇다는 것은 어떤 것을 움직여서 다른 화면으로 보여지는 동작이 필요하고

 

여기서 움직여지는 어떤것은 바로 viewport이다. 

 

다음은 내가 하고 있는 왁뮤의 스크롤 화면을 통해 이해해 보자.

 

 

 

위 스크롤 동작을 보면 scrollview의 origin 좌표가 계속 움직이면서
subview에 대한 시점 (viewport)가 변경되어 다음 내용 또는 이전 내용을
자유롭게 보여줄 수 있다.

 

open class UIScrollView : .. {
	
    open var contentOffset: CGPoint // default CGPointZero
    ..
  }

 

여기서 UIScrollView의 contentOffset 프로퍼티가 바로 ScrollView의 bounds를 설정하는 값이다.

 

contentOffset = 스크롤뷰의 원점(오리진)과 콘텐츠뷰의 원점(오리진)이 떨어진 정도

 

 scrollView.contentOffset.y == contentViewHeight - scrollViewHeight

 

이 특징을 이용해서 마지막 컨텐츠 까지에 도달했는 지 알 수 있다.

 

  frame bounds
origin (x, y)의 기준점 super view의 좌표계 자신의 좌표계
size (width, heigh) View의 영역을 모두 감싸는 사각형 View 영역 자체
사용 용도 View의 위치와 크기를 나타낼 때 View를 회전한 후 View의 실제 크기를 알고 싶을 때

View 내부에 그림을 그릴 때 (drawRect)

- ScrollView에서 스크롤링 할 때

참고

 

iOS) Frame vs Bounds 제대로 이해하기 (3/3)

안녕하세용 소들입니다 :) 오늘은 드디어 frame vs bounds에 대해 막을 내릴 차례 입니다..ㅎㅎㅎㅎㅎ 어우 지금껏 개발하며 이렇게 심오한 개념인지 1도 모르고 썼던 게 충격이다;ㅁ; 쨌든 이번 포스

babbab2.tistory.com

 

반응형