読者です 読者をやめる 読者になる 読者になる

【iOS】【Swift】convertRectを使ってframe位置を計算する親要素を変更する

要素の座標位置を取得するためには、その要素のframeを見ます。

view.frame.minX
view.frame.minY

この時の座標位置は親要素から見た時の相対的な位置になります。

例えばviewが3階層の構造になっている場合、それぞれの座標位置は下記のようになります。

  • 黄色いView: grandParentView
  • 赤いView: parentView
  • 青いView: childView

f:id:w6500:20150813194334p:plain

childViewはparentViewからの位置、parentViewはgrandParentViewからの位置になります。

この時、childViewの位置をgrandParentViewから計算して取得したい場合があります。

単純に考えれば、childViewの座標にparentViewの座標を足せば導き出せます。

parentView.frame.minX + childView.frame.minX
parentView.frame.minY + childView.frame.minY

ですがこれだと計算を自分で書くことになりバグを生みやすくなるので、かわりにconvertRectを使います。

let convertFrame = parentView.convertRect(childView.frame, toView: grandParentView)

convertRect:toViewは、第一引数のframeの位置をtoViewで渡した要素から計算して、新しいCGRectを返します。

これでchildViewの座標位置をgrandParentViewから計算して導き出すことができました。

f:id:w6500:20150813195628p:plain