Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- uiscrollview
- clean architecture
- Refactoring
- collectionview
- 리펙터링
- 클린 코드
- Clean Code
- UICollectionView
- 리팩토링
- Protocol
- 리펙토링
- RxCocoa
- 스위프트
- uitableview
- ios
- Observable
- Xcode
- tableView
- Human interface guide
- rxswift
- ribs
- UITextView
- combine
- 애니메이션
- HIG
- SWIFT
- MVVM
- swiftUI
- swift documentation
- map
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 상대 좌표 frame 구하는 방법 convert(_:to:), window 기준 프레임 구하는 방법 (#relative frame) 본문
iOS 응용 (swift)
[iOS - swift] 상대 좌표 frame 구하는 방법 convert(_:to:), window 기준 프레임 구하는 방법 (#relative frame)
jake-kim 2023. 10. 14. 01:52convert(_:to:) 메소드
- UIView의 확장으로 정의
- 인수로 입력한 view를 기준으로 point의 좌표를 구하는 것
- 중요한 팁) view에 nil을 전달하면 window를 기준으로 상대좌표를 구하므로, 절대좌표 획득이 가능
상대좌표 예시
- 뷰 3개를 겹쳐놓고 각 뷰의 상대좌표를 출력해보는 예시
- 빨강 - 초록 - 파랑을 순서대로 aView, bView, cView라고 정의
- 크기가 정해진 타이밍 viewDidAppear에서 비교
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("== original frame ==")
print("aView = ", aView.frame)
print("bView = ", bView.frame)
print("cView = ", cView.frame)
print("\n\n")
print("== relative frame ==")
print("aView = ", aView.convert(aView.frame, to: nil))
print("bView = ", bView.convert(bView.frame, to: nil))
print("cView = ", cView.convert(cView.frame, to: nil))
}
- 예상대로 relative frame은 superview기준이 아닌 window 기준으로 상대좌표를 계산
== original frame ==
aView = (46.66666666666666, 276.0, 300.0, 300.0)
bView = (75.0, 75.0, 150.0, 150.0)
cView = (39.999999999999986, 40.0, 70.0, 70.0)
== relative frame ==
aView = (93.33333333333331, 552.0, 299.99999999999994, 300.0)
bView = (196.66666666666666, 426.0, 149.99999999999997, 150.0)
cView = (201.66666666666663, 431.0, 70.0, 70.0)
cf) bounds와 구분하기 - bounds는 자기 자신의 뷰 기준이기 때문에 x, y좌표는 모두 0
print("== bounds ==")
print("aView = ", aView.bounds)
print("bView = ", bView.bounds)
print("cView = ", cView.bounds)
== bounds ==
aView = (0.0, 0.0, 300.0, 300.0)
bView = (0.0, 0.0, 150.0, 150.0)
cView = (0.0, 0.0, 70.0, 70.0)
* 전체 코드: https://github.com/JK0369/ExRelativeCoordinate
* 응용) convert(_:to:)를 이용하여 특정 뷰가 현재 화면에 보이는지 확인하는 방법: https://ios-development.tistory.com/1528
* 참고
https://developer.apple.com/documentation/uikit/uiview/1622442-convert
'iOS 응용 (swift)' 카테고리의 다른 글
Comments