Things take time

[SWIFT] 위젯의 상대적인 현재 위치 파악하기 본문

iOS (기능)

[SWIFT] 위젯의 상대적인 현재 위치 파악하기

겸손할 겸 2020. 9. 29. 11:12

[목적]

뷰안에 있는 뷰에서, 가장 위에있는뷰 혹은 현재 슈퍼뷰가 아닌 그 슈퍼뷰 보다 상위에 있는 뷰를 기준으로, 현재 뷰의 위치를 얻어내고자 할 때 사용한다.

 

현재 뷰가 위처럼 되어있다 생각하자.

초록색 뷰는 가운데 정렬되어있으며, 너비는 고정이다.

파란색 뷰와 노란색 뷰는 초록색 뷰 안에 있으며, 그 안에는 leading, trailing 값이 정해져있으며, centerY가 설정되어있다.

 

나는 현재 파란 뷰(bludView라 함)가 초록색뷰 안에서의 오른쪽 마진값은 얻어낼 수 있다. 왜냐하면, 이미 오토레이아웃으로 어느정도 위치를 가질지 당연히 설정했을 것이기 때문이다.

 

그러나 파란뷰의 오른쪽 기준점으로 하얀색 뷰, 전체 뷰 와의 오른쪽 마진값을 얻어내려면 어떻게 할 수 있을까.

 

1. frame.width를 이용한 방법

-> 전체 뷰, 하얀색 전체 뷰의 너비를 구한다.

-> 초록색 뷰의 너비를 구한다.

-> 각 값을 반으로 나눈 뒤, 초록색 뷰 안에서 파란 뷰와 노란 뷰의 각 레이아웃 설정 값들을 계산하여 뺀다.

가장 하드카피이며, 값을 전부 알고 있을 때 사용할 수 있다. 그러나 이 방법의 단점은 재활용을 할 수 없다. 예를 들어, 파란 뷰처럼 특정 뷰를 넘겨받는 함수를 짜는데, 그 함수는 넘겨받은 뷰의 우측 너비를 넘겨받아 계산한다고 가정하자.

 

물론, 위의 방법처럼 그 함수에 전달하기 전에 수치를 계산하여 넘기면 되지만, 너무 공수가 크다. 이럴 때 사용하는 코드!

blueView.convert(blueView.bounds, to: blueView.superVIew())

위 함수는 파란색 뷰 기준으로, 파란색 뷰를 갖고있는 슈퍼뷰에서의 상대적인 위치를 얻어낼 수 있다. 즉, 초록색 뷰 안에서 파란색 뷰의 위치값이다.

 

그렇다면 흰 뷰와의 거리값은 어떻게 얻어낼 수 있을까?

-> to 부분을 변경하면 된다는 의미이다.