일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 스위프트 카메라
- 안드로이드 바로가기
- Swift flutterviewcontroller
- FlutterView MethodChannel
- Swift flutterview
- NotificationService Extension
- 안드로이드 앨범
- Flutter UIKitView MethodChannel
- flutter rotate
- 푸시 데이터 저장
- swift autolayout
- 앱 백그라운드 푸시 데이터 저장
- 스위프트
- 스위프트 앨범
- Flutter NativeView
- swift 문자
- 노티피케이션 익스텐션
- 스위프트 웹뷰
- 스위프트 테이블 뷰 셀
- 안드로이드 숏컷
- 스위프트 푸시
- 앱 꺼졌을 때 푸시 데이터 저장
- swift sms
- 안드로이드 FCM
- native flutter view
- 스위프트 UserDefaults
- silent push
- 플러터 뷰 컨트롤러
- 안드로이드 에러
- flutter 회전
- Today
- Total
Things take time
[SWIFT] 위젯의 상대적인 현재 위치 파악하기 본문
[목적]
뷰안에 있는 뷰에서, 가장 위에있는뷰 혹은 현재 슈퍼뷰가 아닌 그 슈퍼뷰 보다 상위에 있는 뷰를 기준으로, 현재 뷰의 위치를 얻어내고자 할 때 사용한다.
현재 뷰가 위처럼 되어있다 생각하자.
초록색 뷰는 가운데 정렬되어있으며, 너비는 고정이다.
파란색 뷰와 노란색 뷰는 초록색 뷰 안에 있으며, 그 안에는 leading, trailing 값이 정해져있으며, centerY가 설정되어있다.
나는 현재 파란 뷰(bludView라 함)가 초록색뷰 안에서의 오른쪽 마진값은 얻어낼 수 있다. 왜냐하면, 이미 오토레이아웃으로 어느정도 위치를 가질지 당연히 설정했을 것이기 때문이다.
그러나 파란뷰의 오른쪽 기준점으로 하얀색 뷰, 전체 뷰 와의 오른쪽 마진값을 얻어내려면 어떻게 할 수 있을까.
1. frame.width를 이용한 방법
-> 전체 뷰, 하얀색 전체 뷰의 너비를 구한다.
-> 초록색 뷰의 너비를 구한다.
-> 각 값을 반으로 나눈 뒤, 초록색 뷰 안에서 파란 뷰와 노란 뷰의 각 레이아웃 설정 값들을 계산하여 뺀다.
가장 하드카피이며, 값을 전부 알고 있을 때 사용할 수 있다. 그러나 이 방법의 단점은 재활용을 할 수 없다. 예를 들어, 파란 뷰처럼 특정 뷰를 넘겨받는 함수를 짜는데, 그 함수는 넘겨받은 뷰의 우측 너비를 넘겨받아 계산한다고 가정하자.
물론, 위의 방법처럼 그 함수에 전달하기 전에 수치를 계산하여 넘기면 되지만, 너무 공수가 크다. 이럴 때 사용하는 코드!
blueView.convert(blueView.bounds, to: blueView.superVIew())
위 함수는 파란색 뷰 기준으로, 파란색 뷰를 갖고있는 슈퍼뷰에서의 상대적인 위치를 얻어낼 수 있다. 즉, 초록색 뷰 안에서 파란색 뷰의 위치값이다.
그렇다면 흰 뷰와의 거리값은 어떻게 얻어낼 수 있을까?
-> to 부분을 변경하면 된다는 의미이다.
'iOS (기능)' 카테고리의 다른 글
[iOS 14] Detect Phone Call => non-intrusive 전화 감지 방법 (0) | 2020.10.13 |
---|---|
[SWIFT] FrameWork만들기! (0) | 2020.10.06 |
[SWIFT] Autolayout 사용하기 - 가로/세로 변경 및 하위뷰 변경 (0) | 2020.09.25 |
[Swift] UIButton Highlight 및 Selected Background Color 변경 (0) | 2020.09.24 |
[SWIFT] 투명도가 있는 뷰 하위에 추가 되는 뷰에서 투명도 영향 받지 않기 (1) | 2020.02.25 |