J'ai un UIView, dans lequel j'ai arrangé des UIButtons. Je veux trouver les positions de ces UIButtons.
Je sais que buttons.frame
cela me donnera les postes, mais cela ne me donnera des postes que par rapport à sa supervision immédiate.
Existe-t-il un moyen de trouver les positions de ces boutons, par rapport au superview de UIButtons superview?
Par exemple, supposons qu'il y ait UIView nommé "firstView".
Ensuite, j'ai un autre UIView, "secondView". Ce "SecondView" est une sous-vue de "firstView".
Ensuite, j'ai UIButton comme sous-vue sur le "secondView".
->UIViewController.view
--->FirstView A
------->SecondView B
------------>Button
Maintenant, y a-t-il un moyen de trouver la position de cet UIButton, par rapport à "firstView"?
Bien que cela ne soit pas spécifique au bouton dans la hiérarchie, comme demandé, j'ai trouvé cela plus facile à visualiser et à comprendre:
D'ici: source originale
ObjC:
Rapide:
la source
Mis à jour pour Swift 3
la source
Cadre: (X, Y, largeur, hauteur).
Par conséquent, la largeur et la hauteur ne changeront pas même avec la vue super-super. Vous pouvez facilement obtenir le X, Y comme suit.
la source
S'il y a plusieurs vues empilées et que vous n'avez pas besoin (ou ne voulez) pas connaître les vues possibles entre les vues qui vous intéressent, vous pouvez faire ceci:
où
targetView
serait le bouton,baseView
serait leViewController.view
.Ce que cette fonction essaie de faire est ce qui suit:
Si
targetView
n'a pas de super vue, sa coordonnée actuelle est renvoyée.Si la
targetView's
super vue n'est pas la baseView (c'est-à-dire qu'il y a d'autres vues entre le bouton etviewcontroller.view
), une coordonnée convertie est récupérée et transmise à la suivantesuperview
.Il continue à faire de même à travers la pile de vues se déplaçant vers la baseView.
Une fois qu'il atteint le
baseView
, il effectue une dernière conversion et le renvoie.Remarque: il ne gère pas une situation où
targetView
est positionné sous lebaseView
.la source
Extension UIView pour convertir le cadre de la sous-vue (inspiré de @Rexb answer).
la source
Vous pouvez facilement obtenir la vue super-super comme suit.
secondView -> [bouton
superview ] firstView -> [[bouton superview] superview]
Ensuite, vous pouvez obtenir la position du bouton.
Vous pouvez utiliser ceci:
la source