46

方法がよくわかりませんconvertPoint:toView:

Appleのドキュメントには、次のように書かれています。

convertPoint:toView:

レシーバーの座標系から指定されたビューの座標系にポイントを変換します。

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view

しかし、ポイントをあるポイントから別のポイントに変換することは、実際にはどういう意味ですか?

両方の境界のポイントの単位が異なることを意味しますか?または単に異なる値?

contentOffset後者の場合、aの値をbに単純に割り当てることができるのに、なぜそのような方法があるのでしょうか。

CGPoint a = [a contentOffset];
[b setContentOffset:a];

単に割り当てるのとどうconvertPoint:toView:違うのcontentOffsetですか?それとも私は全体の概念を誤解しましたか?変換ポイントは実際に何をしますか?この方法はいつ使用する必要がありますか?

4

1 に答える 1

125

すべてのUIViewには独自の座標系があります。したがって、別のUIView_2を含むUIView_1がある場合、両方の中にポイント(10,10)があります。

convertPoint:toView:開発者が1つのビューでポイントを取得し、そのポイントを別のビュー座標系に変換できるようにします。

例:view1にはview2が含まれています。view2の左上隅は、view1ポイント(10,10)にあります。つまり、view2.frame.orgin={10,10}と言います。その{10,10}は、view1座標系に基づいています。ここまでは順調ですね。

ユーザーは、view2内のポイント{20,20}でview2に触れます。これで、これらの座標はview2座標系になります。これで、covertPoint:toView:を使用して、{20,20}をview1の座標系に変換できます。touchPoint = {20,20}

CGPoint pointInView1Coords = [view2 convertPoint:touchPoint toView:view1];

したがって、pointInView1Coordsはview1座標系で{30,30}になります。これは、この例では単純な計算でしたが、変換に寄与するさまざまなものがあります。変換とスケーリングが思い浮かびます。

UIViewのフレーム、境界、および中心についてお読みください。それらはすべて関連しており、ビューの座標系を扱います。あなたが彼らと何かをし始めるまで、それは混乱します。このフレームと中心は親の座標系にあることを忘れないでください。境界はビューの座標系にあります。

ジョン

于 2013-02-27T14:31:30.940 に答える