web-dev-qa-db-ja.com

iOS-ウィンドウ内のビューの位置を取得しますか?

クリックするとポップアップが表示されるUIViewがあります。メインUIWindowにポップアップを追加して、他のすべての上に表示されるようにする必要があります。

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

質問:UIViewがUIWindow内に直接ない場合(viewControllerのビュー内にある場合)、UIWindow内のUIViewの場所を見つけるにはどうすればよいですか?

33
aryaxt

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;

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

お役に立てれば、

デイブ

65

.superviewはあなたのためにあなたのためにあなたのOriginを変換します

CGPoint originGlobal = [myView.superview convertPoint:myView.frame.Origin 
                                               toView:nil];
12

UIViewのconvertPoint:toView:は機能しませんか?そう:

CGPoint windowPoint = [myView convertPoint:myView.bounds.Origin toView:myWindow];
8
Craig

Xamarin.iOSでこれを行う必要がありました

そこで解決策を探している人にとって、最終的に私にとってうまくいったのは:

CGRect globalRect = smallView.ConvertRectToView(smallView.Bounds, rootView);
6
Stoyan Berov

Xamarin.iOS実装の下で私のために働いた。

    CGRect GetRectAsPerWindow(UIView view)
    {
        var window = UIApplication.SharedApplication.KeyWindow;
        return view.Superview.ConvertRectToView(view.Frame, window);
    }

Windowに関してフレームが必要なビューを渡します。

0
soan saini