J'ai un UIImageView
en el self.view
(la vue principale) et à l'intérieur de celle-ci il y a une UIButton
. Je veux savoir ce qu'est le cadre des UIButton
en self.view
pas dans UIImageView
.
Réponses
Trop de publicités?Il y a quatre UIView
des méthodes qui peuvent vous aider, en convertissant CGPoints
y CGRects
d'un UIView
référence de coordonnées à une autre :
– convertPoint:toView:
– convertPoint:fromView:
– convertRect:toView:
– convertRect:fromView:
pour que vous puissiez essayer
CGRect f = [imageView convertRect:button.frame toView:self.view];
o
CGRect f = [self.view convertRect:button.frame fromView:imageView];
Swift 3
Vous pouvez convertir le cadre du bouton en système de coordonnées de la vue avec ceci :
self.view.convert(myButton.frame, from: myButton.superview)
Assurez-vous de mettre votre logique à l'intérieur viewDidLayoutSubviews
et non viewDidLoad
. Les opérations liées à la géométrie doivent être effectuées après la mise en place des vues secondaires, sinon elles risquent de ne pas fonctionner correctement.
class ViewController: UIViewController {
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myButton: UIButton!
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let buttonFrame = self.view.convert(myButton.frame, from: myButton.superview)
}
}
Vous pouvez simplement faire référence myButton.superview
au lieu de myImageView
lors de la conversion du cadre.
Voici d'autres options pour convertir un CGPoint
o CGRect
.
self.view.convert(point: CGPoint, from: UICoordinateSpace)
self.view.convert(point: CGPoint, from: UIView)
self.view.convert(rect: CGRect, from: UICoordinateSpace)
self.view.convert(rect: CGRect, from: UIView)
self.view.convert(point: CGPoint, to: UICoordinateSpace)
self.view.convert(point: CGPoint, to: UIView)
self.view.convert(rect: CGRect, to: UICoordinateSpace)
self.view.convert(rect: CGRect, to: UIView)
Voir le Documents pour les développeurs d'Apple pour en savoir plus sur la conversion d'un CGPoint
o CGRect
.
Quelque chose comme ça ? Je peux me tromper, je n'y ai pas vraiment réfléchi ;p
CGRect frame = CGRectMake((self.view.frame.origin.x-imageview.frame.origin.x) +btn.frame.origin.x,
(self.view.frame.origin.y.imageview.frame.origin.y)+btn.frame.origin.y,
btn.frame.size.width,
btn.frame.size.height);
Je ne sais pas s'il y a un moyen plus facile.