Eu tenho um UIView, no qual arranjei UIButtons. Eu quero encontrar as posições desses UIButtons.
Estou ciente de que buttons.frame
isso me dará as posições, mas isso me dará posições apenas no que diz respeito à sua supervisão imediata.
Existe alguma maneira de encontrarmos as posições desses botões, com respeito ao superview do UIButtons superview?
Por exemplo, suponha que haja UIView denominado "firstView".
Então, eu tenho outro UIView, "secondView". Esta "SecondView" é uma subvisualização de "firstView".
Então eu tenho UIButton como uma subvisualização no "secondView".
->UIViewController.view
--->FirstView A
------->SecondView B
------------>Button
Agora, há alguma maneira de encontrarmos a posição desse UIButton, em relação a "firstView"?
Embora não seja específico para o botão na hierarquia, conforme solicitado, achei mais fácil de visualizar e entender:
Daqui: fonte original
ObjC:
Rápido:
fonte
Atualizado para Swift 3
fonte
Quadro: (X, Y, largura, altura).
Conseqüentemente, a largura e a altura não mudarão, mesmo em relação à super visão. Você pode obter facilmente o X, Y da seguinte forma.
fonte
Se houver várias visualizações empilhadas e você não precisar (ou desejar) saber nenhuma visualização possível entre as visualizações nas quais está interessado, você pode fazer o seguinte:
onde
targetView
estaria o botão,baseView
seria oViewController.view
.O que esta função está tentando fazer é o seguinte:
Se
targetView
não tiver uma supervisão, sua coordenada atual será retornada.Se
targetView's
a supervisão não for baseView (ou seja, houver outras vistas entre o botão eviewcontroller.view
), uma coordenada convertida é recuperada e passada para a próximasuperview
.Ele continua a fazer o mesmo por meio da pilha de visualizações em direção a baseView.
Quando atinge o
baseView
, ele faz uma última conversão e o retorna.Nota: ele não lida com uma situação onde
targetView
está posicionado sob obaseView
.fonte
Extensão UIView para converter o quadro de subvisualização (inspirado na resposta de @Rexb).
fonte
Você pode obter facilmente a superexibição da seguinte forma.
secondView -> [botão superview]
firstView -> [[botão superview] superview]
Então, você pode obter a posição do botão.
Você pode usar isto:
fonte