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