Ho un UIImageView
nel self.view
(la vista principale) e al suo interno c'è un UIButton
. Voglio sapere qual è il frame di UIButton
in self.view
non in UIImageView
.Come ottenere la cornice di una vista all'interno di un'altra vista?
risposta
immagino siete alla ricerca di questo metodo
// Swift
let frame = imageView.convert(button.frame, to: self.view)
// Objective-C
CGRect frame = [imageView convertRect:button.frame toView:self.view];
Qualcosa di simile? potrebbe essere totalmente sbagliato, dint pensavo davvero attraverso; 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);
Non so se c'è un modo più semplice.
Esistono quattro UIView
metodi che possono aiutare, la conversione CGPoints
e CGRects
da un UIView
coordinate riferimento a un altro:
– convertPoint:toView:
– convertPoint:fromView:
– convertRect:toView:
– convertRect:fromView:
quindi puoi provare
CGRect f = [imageView convertRect:button.frame toView:self.view];
o
CGRect f = [self.view convertRect:button.frame fromView:imageView];
Swift 3
È possibile convertire cornice del pulsante per il sistema di coordinate della visualizzazione con questo:
self.view.convert(myButton.frame, from: myButton.superview)
Assicurati di inserire la logica all'interno di viewDidLayoutSubviews
e non di viewDidLoad
. Le operazioni relative alla geometria devono essere eseguite dopo la presentazione delle subview, altrimenti potrebbero non funzionare correttamente.
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)
}
}
Si può solo riferimento myButton.superview
anziché myImageView
durante la conversione del telaio.
Qui ci sono più opzioni per la conversione di 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)
Vedere la Apple Developer Docs per più sulla conversione di un CGPoint
o CGRect
.