Programing

convertPoint를 사용하여 부모 UIView 내부의 상대 위치 가져 오기

crosscheck 2020. 12. 7. 07:51
반응형

convertPoint를 사용하여 부모 UIView 내부의 상대 위치 가져 오기


나는이 주제에 대해 12 개의 SO 질문을 보았지만 어떤 대답도 나를 위해 일하지 않았습니다. 아마도 이것이 내가 올바른 길로 돌아가는 데 도움이 될 것입니다.

이 설정을 상상해보십시오.

여기에 이미지 설명 입력

centerUIView를 기준으로 UIButton 좌표 를 얻고 싶습니다 .

즉, UIButton 센터는 UITableViewCell 내에서 215, 80 일 수 있지만 UIView에 비해 상대적으로 260, 165와 비슷해야합니다. 둘 사이를 어떻게 변환합니까?

내가 시도한 것은 다음과 같습니다.

[[self.view superview] convertPoint:button.center fromView:button];  // fail
[button convertPoint:button.center toView:self.view];  // fail
[button convertPoint:button.center toView:nil];  // fail
[button convertPoint:button.center toView:[[UIApplication sharedApplication] keyWindow]];  // fail

버튼의 모든 수퍼 뷰를 반복하고 x 및 y 좌표를 합산하여 어려운 방법으로 할 수 있지만 과잉이라고 생각합니다. covertPoint 설정의 올바른 조합을 찾기 만하면됩니다. 권리?


button.centersuperview 의 좌표계 내에 지정된 중심 이므로 다음이 작동한다고 가정합니다.

CGPoint p = [button.superview convertPoint:button.center toView:self.view]

또는 자체 좌표계에서 버튼의 중심을 계산하고 다음을 사용합니다.

CGPoint buttonCenter = CGPointMake(button.bounds.origin.x + button.bounds.size.width/2,
                                   button.bounds.origin.y + button.bounds.size.height/2);
CGPoint p = [button convertPoint:buttonCenter toView:self.view];

스위프트 4

var p = button.convert(button.center, to: self.view)

마틴 대답이 맞습니다. Swift를 사용하는 개발자의 경우 다음을 사용하여 화면과 관련된 개체 (버튼,보기, ...)의 위치를 ​​가져올 수 있습니다.

var p = obj.convertPoint(obj.center, toView: self.view)

println(p.x)  // this prints the x coordinate of 'obj' relative to the screen
println(p.y)  // this prints the y coordinate of 'obj' relative to the screen

Swift 4 수퍼 뷰가 아닌 버튼에서

호출해야합니다 convert. 제 경우에는 너비 데이터가 필요했기 때문에 중심점 대신 경계를 변환했습니다. 아래 코드는 저에게 효과적입니다.

let buttonAbsoluteFrame = button.convert(button.bounds, to: self.view)

다음은 @Pablo 의 답변에 대한 Swift 3 업데이트입니다.

if let window = UIApplication.shared.keyWindow {
    parent.convert(child.frame.origin, to: window)
}

신속한 2.2에서 나를 위해 일했습니다.

var OrignTxtNomeCliente:CGPoint!

if let orign = TXT_NomeCliente.superview, let win = UIApplication.sharedApplication().keyWindow {
        OrignTxtNomeCliente = orign.convertPoint(TXT_NomeCliente.frame.origin, toView: win)
    }

참고 URL : https://stackoverflow.com/questions/15883305/using-convertpoint-to-get-the-relative-position-inside-a-parent-uiview

반응형