2013-07-10 15 views
53

Mam UIView, w którym mam ustawione UIButtons. Chcę znaleźć pozycje tych UButtonów.Zdobądź pozycję UIView w odniesieniu do superview superview

Jestem świadomy, że buttons.frame da mi pozycje, ale da mi pozycje tylko w odniesieniu do jego bezpośredniego superwizji.

Czy istnieje sposób, w jaki możemy znaleźć pozycje tych przycisków, z szacunkiem do UButtons superview's superview?

Załóżmy na przykład, że istnieje UIView o nazwie "firstView".

Następnie mam inne UIView, "secondView". Ten "SecondView" jest podzbiorem "firstView".

Następnie mam UIButton jako podzbiór na "secondView".

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

Czy istnieje sposób, w jaki możemy znaleźć pozycję tego UIButtonu w odniesieniu do "firstView"?

Odpowiedz

125

Można to wykorzystać:

Objective C

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

Swift odniesienia

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

Dokumentacja:

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

+0

Aby dodać do tego, jeśli widok nie zawsze jest w tym samym widoku (powiedzmy, jeśli używasz to w funkcja) możesz umieścić "... fromView: [button superview]]; ' – mylogon

6

Ramka: (X, Y, szerokość, wysokość).

Dlatego szerokość i wysokość nie zmieniają się nawet w super-super widoku. Możesz łatwo uzyskać X, Y w następujący sposób.

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

Ale dlaczego otrzymuję wartość X, Y w tak dużej ilości, jak wtedy, gdy moje X było 0,0, to otrzymuję z liniami kodu; 180224 czy tak? – YumYumYum

4

Aktualizacja dla Swift 3

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

     print(frame) 
    } 

enter image description here

Powiązane problemy