2013-07-10 44 views
53

Tôi có UIView, trong đó tôi đã sắp xếp UIButtons. Tôi muốn tìm vị trí của những UIButtons đó.Nhận vị trí của UIView đối với người giám sát của người giám sát

Tôi biết rằng buttons.frame sẽ cho tôi các vị trí, nhưng nó sẽ chỉ cho tôi các vị trí liên quan đến người giám sát trực tiếp của nó.

Có cách nào chúng tôi có thể tìm thấy vị trí của các nút đó hay không, liên quan đến giám sát của UIButtons superview?

Ví dụ: giả sử có UIView có tên là "firstView".

Sau đó, tôi có một UIView khác, "secondView". "SecondView" này là một subview của "firstView".

Sau đó, tôi có UIButton làm chế độ xem phụ trên "chế độ xem thứ hai".

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

Bây giờ, có cách nào chúng ta có thể tìm thấy vị trí của UIButton đó, đối với "firstView" không?

Trả lời

125

Bạn có thể sử dụng này:

Objective C

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

Swift tham khảo

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

Tài liệu:

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

+0

Để thêm vào đó, nếu tầm nhìn của bạn không phải lúc nào cũng trong quan điểm tương tự (ví dụ, nếu bạn đang sử dụng điều này trong một chức năng) bạn có thể đặt '... fromView: [button superview]];' – mylogon

6

Khung: (X, Y, chiều rộng, chiều cao).

Do đó chiều rộng và chiều cao sẽ không thay đổi ngay cả khi chế độ xem siêu siêu. Bạn có thể dễ dàng nhận được X, Y như sau.

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

Nhưng tại sao tôi nhận được giá trị X, Y với số tiền cao như khi X của tôi là 0,0 thì tôi đang nhận được với các dòng mã của bạn như; 180224 hay như vậy? – YumYumYum

4

Cập nhật cho Swift 3

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

     print(frame) 
    } 

enter image description here