2011-08-11 21 views
29

Tôi có UIView hiển thị cửa sổ bật lên sau khi được nhấp vào. Cửa sổ bật lên cần được thêm vào UIWindow chính để đảm bảo rằng cửa sổ bật lên nằm trên đầu trang của mọi thứ khác.iOS - Nhận vị trí của chế độ xem trong cửa sổ?

Tôi muốn vị trí của cửa sổ bật lên này liên quan đến UIView của tôi, vì vậy tôi cần biết vị trí tương đối của UIView của tôi trong cửa sổ.

Câu hỏi: Làm thế nào tôi có thể tìm thấy vị trí của UIView trong UIWindow khi UIView không trực tiếp trong UIWindow (Nó nằm trong chế độ xem của viewController của tôi)?

Trả lời

58

Sử dụng có thể sử dụng phương pháp UIView covertRect: toView để chuyển đổi sang không gian phối hợp mới. Tôi đã làm điều gì đó rất giống:

// Convert the co-ordinates of the view into the window co-ordinate space 
CGRect newFrame = [self convertRect:self.bounds toView:nil]; 

// Add this view to the main window 
[self.window addSubview:self]; 
self.frame = newFrame; 

Trong ví dụ của tôi, tự là chế độ xem đang được xóa khỏi superView và thêm vào cửa sổ phía trên vị trí của nó. Tham số nil trong toView: có nghĩa là sử dụng cửa sổ chứ không phải là một khung nhìn cụ thể.

Hope this helps,

Dave

+0

Tuyệt vời, điều này làm việc – aryaxt

+0

Hoàn hảo. Có một số loại phương pháp này để chuyển đổi và từ không gian phối hợp nếu bạn cần chúng. –

+1

Tính năng này có hoạt động khi chế độ xem nằm bên trong một UIScrollView – AntiMoron

-6
CGRect myFrame = self.superview.bounds; 
8

Liệu UIView của convertPoint: toView: không hoạt động? Vì vậy:

CGPoint windowPoint = [myView convertPoint:myView.bounds.origin toView:myWindow]; 
10

Bạn có thể yêu cầu .superview của bạn để chuyển đổi origin cho bạn cho bạn

CGPoint originGlobal = [myView.superview convertPoint:myView.frame.origin 
               toView:nil]; 
5

tôi cần phải làm điều này trong Xamarin.iOS

Đối với bất cứ ai tìm kiếm một giải pháp ở đó, những gì cuối cùng làm việc cho tôi là:

CGRect globalRect = smallView.ConvertRectToView(smallView.Bounds, rootView); 
Các vấn đề liên quan