self.view
(メインビュー)にUIImageView
があり、その中にUIButton
があります。 UIButton
にないself.view
のUIImageView
のフレームを知りたい。
この方法を探していると思います
// Swift
let frame = imageView.convert(button.frame, to: self.view)
// Objective-C
CGRect frame = [imageView convertRect:button.frame toView:self.view];
UIView
とCGPoints
をあるCGRects
座標参照から別の座標参照に変換するのに役立つ4つのUIView
メソッドがあります。
– convertPoint:toView:
– convertPoint:fromView:
– convertRect:toView:
– convertRect:fromView:
だからあなたは試すことができます
CGRect f = [imageView convertRect:button.frame toView:self.view];
または
CGRect f = [self.view convertRect:button.frame fromView:imageView];
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)
}
}
フレームを変換するときに、myImageView
の代わりにmyButton.superview
を参照するだけです。
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 を参照してください。
このようなもの?まったく間違っているかもしれませんが、dintは本当に考えました; 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);
もっと簡単な方法があるかどうかはわかりません。