2013-07-10 13 views
53

Ho un UIView, in cui ho organizzato UIButtons. Voglio trovare le posizioni di quegli UIButtons.Ottieni la posizione di UIView rispetto alla superview del suo superview

Sono consapevole del fatto che lo buttons.frame mi darà le posizioni, ma mi darà posizioni solo rispetto alla sua immediata superview.

C'è un modo per trovare le posizioni di questi pulsanti, rispettando la superview di UIButtons superview?

Ad esempio, supponiamo che ci sia UIView denominato "firstView".

Quindi, ho un altro UIView, "secondView". Questa "SecondView" è una sottoview di "firstView".

Quindi ho UIButton come sottoview sul "secondView".

->UIViewController.view 
--->FirstView A 
------->SecondView B 
------------>Button 

Ora, c'è un modo per trovare la posizione di tale UIButton, rispetto a "firstView"?

risposta

125

È possibile utilizzare questo:

Objective C

CGRect frame = [firstView convertRect:buttons.frame fromView:secondView]; 

Swift riferimento

let frame = firstView.convert(buttons.frame, from:secondView) 

Documentazione:

https://developer.apple.com/documentation/uikit/uiview/1622498-convert

+0

Per aggiungere a questo, se la vostra vista non è sempre nella stessa vista (ad esempio, se si sta utilizzando questo in un funzione) puoi inserire '... fromView: [button superview]];' – mylogon

6

Telaio: (X, Y, larghezza, altezza).

Quindi la larghezza e l'altezza non cambieranno anche nella vista super-super. Puoi facilmente ottenere la X, Y come segue.

X = button.frame.origin.x + [button superview].frame.origin.x; 
Y = button.frame.origin.y + [button superview].frame.origin.y; 
+0

Ma perché sto ottenendo il valore X, Y in quantità così alta come quando la mia X era 0,0, quindi sto ottenendo con le tue linee di codice come; 180224 circa? – YumYumYum

4

aggiornato per Swift 3

if let frame = yourViewName.superview?.convert(yourViewName.frame, to: nil) { 

     print(frame) 
    } 

enter image description here