Swift 3
Вы можете преобразовать рамку кнопки в систему координат вида следующим образом:
self.view.convert(myButton.frame, from: myButton.superview)
Убедитесь, что ваша логика находится внутри viewDidLayoutSubviews
, а не viewDidLoad
. Операции, связанные с геометрией, должны выполняться после размещения подпредставлений, иначе они могут работать некорректно.
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)
}
}
Вы можете просто ссылаться на myButton.superview
вместо myImageView
при преобразовании кадра.
Вот еще несколько вариантов преобразования CGPoint
или 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)
Подробнее о преобразовании CGPoint
или CGRect
.
см. В
Apple Developer Docs .