J'ai un UIView qui affiche une fenêtre contextuelle après avoir cliqué sur .. .. La fenêtre contextuelle doit être ajoutée à la fenêtre principale UIWindow pour être sûr qu'elle passe au-dessus de tout le reste.
Je souhaite que la position de cette fenêtre contextuelle soit relative à mon UIView. J'ai donc besoin de connaître l'emplacement relatif de mon UIView dans la fenêtre.
Question: Comment puis-je trouver l'emplacement d'un UIView dans une UIWindow lorsque UIView n'est pas directement dans la UIWindow (dans la vue de mon viewController)?
Use peut utiliser la méthode UIView covertRect: toView pour convertir le nouvel espace de coordonnées. J'ai fait quelque chose de très similaire:
// 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;
Dans mon exemple, self est une vue qui est en train d'être supprimée de sa superView et ajoutée à la fenêtre située au-dessus de l'endroit où elle se trouvait. Le paramètre nil dans toView: signifie qu'il faut utiliser la fenêtre plutôt qu'une vue spécifique.
J'espère que cela t'aides,
Dave
Vous pouvez demander à votre .superview
de convertir votre Origin
pour vous.
CGPoint originGlobal = [myView.superview convertPoint:myView.frame.Origin
toView:nil];
Est-ce que convertPoint: toView: UIView ne fonctionne pas? Alors:
CGPoint windowPoint = [myView convertPoint:myView.bounds.Origin toView:myWindow];
Je devais le faire dans Xamarin.iOS
Pour ceux qui recherchent une solution, ce qui a finalement fonctionné pour moi a été:
CGRect globalRect = smallView.ConvertRectToView(smallView.Bounds, rootView);
Ci-dessous, l'implémentation Xamarin.iOS a fonctionné pour moi.
CGRect GetRectAsPerWindow(UIView view)
{
var window = UIApplication.SharedApplication.KeyWindow;
return view.Superview.ConvertRectToView(view.Frame, window);
}
Passez dans la vue dont vous voulez le cadre par rapport à Fenêtre.