3

大きなUIViewの子/サブビューとして小さなUIViewがあり、その子はいくつかのCGAffineTransformsを介して移動できるとします。親は、そのビューの真の「中心」が独自の座標系内にあることをどのように知ることができますか? child.center によって返されるもので convertPoint ルーチンを使用しようとしましたが、機能していません...このコンテキストでは「center」は完全に偽物ですか、それとも間違った方法を使用しているだけですか?

4

1 に答える 1

6

編集:

少しテストを行った後、次のことに気付きました。

UIView には anchorPoint プロパティはありませんが、center プロパティはあります。center プロパティは、変換を適用した後に常に適切に計算されます。ただし、次の操作を行う必要がある平行移動変換は除きます。

CGPoint realCenter = CGPointMake(myView.center.x + myView.frame.origin.x, ...);

sについてCALayerは、anchorPoint プロパティはありますが、center プロパティがありません。したがって、あなたがしたいことは、位置プロパティ、アンカーポイント プロパティ、およびレイヤーの移動を計算して、中心を手動で計算することです。

どちらの方法を使用しているかわからないため、コードを提供することはできませんが、まとめると、いずれかの方法で独自のセンター計算機を展開する必要があります。


以下の写真を注意深く見てください (スタンフォード iPhone 開発コースのスライドの提供):

回転を適用する前に:

ここに画像の説明を入力

45°回転を適用した後:

ここに画像の説明を入力

結論:

古い中心が (300, 225) で、新しい中心が新しくないことに注意してください! それは同じだ。すべてを正しく行っている場合、中心は同じである必要があります。ビュー内に計算したい別のポイントがある場合は、自分でそれを行う必要があります。

フレームが (200, 100, 200, 250) から (140, 65, 320, 320) にどのように変化したかも注目してください。これが UIKit の魔法です。

于 2012-10-20T18:07:09.897 に答える