42 votes

Comment obtenir le cadre d'une vue à l'intérieur d'une autre vue ?

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 .

101voto

beryllium Points 18138

Je suppose que vous cherchez cette méthode

- convertRect:toView :

// Swift
let frame = imageView.convert(button.frame, to: self.view)

// Objective-C
CGRect frame = [imageView convertRect:button.frame toView:self.view];

20voto

jbat100 Points 11445

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

11voto

Derek Soike Points 3634

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 .

1voto

Rasmus Styrk Points 390

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X