Bounds와 Frame은 뷰의 위치 또는 크기를 나타낸다는 공통점을 가지고 있습니다.
하지만, 나타내는 방식은 다른데요
Frame
frame은 UIView의 instance property입니다.
프레임은 "부모 뷰"의 좌표시스템에 따라 해당 뷰의 위치와 사이즈를 나타냅니다.
이때 "부모 뷰"는 뷰 계층에서 상위 뷰를 의미합니다.
Frame에서 "위치"를 나타내는 방식
예시를 가져왔습니다. 환경은 두개의 UIScrollView와 UIImage 컴포넌트를 준비했습니다.
UIImageView는 UIScrollView에 속하게 되었고,
즉! UIScrollView는 UIImageView의 부모 뷰입니다.
frame은 부모 뷰의 좌표 시스템의 영향을 받아 크기와 위치 결정된다고 하였습니다.
imageView(검정색 사각형)의 위치는 origin(좌측 상단)지점 x = 45.0, y = 115.0입니다.
한번 imageViewdml 위치를 변경해보도록 하겠습니다.
scrollView(파란색 사각형) origin과 일치하게 imageView를 위치 시키면 x = 0.0, y = 0.0을 확인할 수 있습니다.
부모 뷰의 origin과 자식 뷰의 origin이 x,y 기준으로 얼마만큼 떨어져 있는지 나타내는 것입니다.
부모 뷰의 좌표에 영향을 받아 자식 뷰의 위치를 방식이 바로 frame입니다.
그래서 frame 위치방식은 만약 부모가 움직이게 된다면 자식들도 부모가 움직만큼 계산하여 자신이 가지 frame 거리만큼 유지하려고 합니다.
import UIKit
class ViewController: UIViewController {
var isScrollNormal = true
@IBOutlet var uiView: UIView!
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("scrollView의 bounds 좌표: \(scrollView.bounds.origin)")
print("imageView의 bounds 좌표: \(imageView.bounds.origin)")
}
@IBAction func changeBounds(_ sender: Any) {
scrollView.frame.origin.x += 63
}
}
버튼을 눌렀을때 scrollView를 63만큼(오른쪽 끝으로) 이동하게 하였습니다.
누르는 순간 scrollView가 움직이고 scrollView의 자식인 imageView도 함께 움직이게 되었습니다.
Frame에서 "사이즈"를 나타내는 방식
"View를 감쌀 수 있는 사각형의 가로 길이 세로 길이"라 할 수 있습니다.
frame의 크기를 측정할때는 같은 view라도 "측정을 위한 사각형"의 모서리들이 "디바이스의 모서리"와 평행을 이루는 사각형으로 view의 세로 길이와 가로 길이를 측정 때문에 해당 view의 frame 크기는 달라지게 됩니다.
frame의 속성을 애니메이션으로 보여줄 때
transform 프로퍼티를 사용하려고 한다면, frame 속을 변경하면 안되고,
위치를 변경하고 싶을때는 center 속성,
크기를 조정하고 싶을때는 bounds를 조정해야합니다.
Reference
https://zeddios.tistory.com/203
iOS ) Frame과 Bounds의 차이 (1/2)
안녕하세요 :) Zedd입니다. 지금 다른 글을 쓰고있는데, 쓰면 쓸수록 쓸 주제가 많아집니다...급 이 글을 쓰게 됐어요 XD..아무튼 오늘은 저도 궁금했던 Frame과 Bounds의 차이를 알아볼거에요 :)다음글
zeddios.tistory.com
https://babbab2.tistory.com/44
iOS) Frame vs Bounds 제대로 이해하기 (1/3)
안녕하세요 :D 소들입니다 후후......... 오늘은 Frame과 Bounds에 대해 알아볼 거예욥...! 그 있잖음.. UIView에 등장하는 두 놈... 이전 포스팅 에서 CGRect는 View의 위치(origin)와 크기(size)를 나타내기 위해
babbab2.tistory.com
'iOS 개발공부📱' 카테고리의 다른 글
View Controller Lifecycle (0) | 2023.09.11 |
---|---|
Responder, Responder Chain (0) | 2023.09.10 |
MVVM pattern (0) | 2023.09.04 |