J'ai un UIImageView
dans le self.view
(la vue principale) et à l'intérieur il y a un UIButton
. Je veux savoir quel est le cadre de UIButton
dans self.view
pas dans UIImageView
.
Je suppose que vous cherchez cette méthode
// Swift
let frame = imageView.convert(button.frame, to: self.view)
// Objective-C
CGRect frame = [imageView convertRect:button.frame toView:self.view];
Il existe quatre méthodes UIView
qui peuvent vous aider, en convertissant CGPoints
et CGRects
d'une référence de coordonnées UIView
en une autre:
– convertPoint:toView:
– convertPoint:fromView:
– convertRect:toView:
– convertRect:fromView:
pour que vous puissiez essayer
CGRect f = [imageView convertRect:button.frame toView:self.view];
ou
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 dans viewDidLayoutSubviews
et non viewDidLoad
. Les opérations liées à la géométrie doivent être effectuées après la présentation des sous-vues, 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 référencer myButton.superview
au lieu de myImageView
lors de la conversion du cadre.
Voici plus d'options pour convertir un CGPoint
ou 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 Apple Developer Docs pour en savoir plus sur la conversion d'un CGPoint
ou CGRect
.
Quelque chose comme ça? pourrait être totalement faux, à force d'y réfléchir; 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 existe un moyen plus simple.