2011-08-11 9 views
29

私はそれがクリックされた後にポップアップを表示するUIViewを持っています。 メインUIWindowにポップアップを追加して、それが他のものよりも優先されるようにする必要があります。iOS - ウィンドウ内のビューの位置を取得しますか?

私は、このポップアップの位置を自分のUIViewからの相対位置にしたいので、ウィンドウ内のUIViewの相対位置を知る必要があります。

質問:UIViewがUIWindowに直接存在しない場合(UIViewViewのビュー内にある)、UIWindow内のUIViewの位置を確認するにはどうすればよいですか?

答えて

58

UIViewメソッドcovertRect:toViewを使用して、新しい座標空間に変換できます。私は非常に似たようなやった:私の例では

// 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; 

を、自己がそのスーパービューから削除され、それがあった場所の上にウィンドウに追加されている図です。 toView:のnilパラメータは、特定のビューではなくウィンドウを使用することを意味します。このことができます

希望、

デイブ

+0

素晴らしい、これは – aryaxt

+0

パーフェクトに働いた。必要に応じて、座標空間への変換や座標空間からの変換のためのこれらのタイプの方法がいくつかあります。 –

+1

ビューがUIScrollViewの中にあるときにこれは機能しますか – AntiMoron

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

んのUIViewのconvertPoint:toView:動作しませんか?だから、:

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

あなたは私が解決策を探している人のためにXamarin.iOS

でこれを行うために必要なあなた

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

のためにあなたのためにoriginを変換するために、あなたの.superviewを依頼することができますそこに、私のために最終的に働いたものは、でした:

CGRect globalRect = smallView.ConvertRectToView(smallView.Bounds, rootView); 
関連する問題