21

CGAffineTransformMakeScale を使用して UIView をスケーリングしていますが、スケーリング時に現在の上部中心点に固定したままにしたいと考えています。

設定を調べましたが、アンカーポイントの変更を考慮しview.layer.anchorPointて設定と組み合わせて使用​​する必要があると思います。view.layer.position

誰かが私を正しい方向に向けることができれば、私はとても感謝しています!

4

3 に答える 3

45

ここで私の回答を見て、アンカーポイントを変更したときにビューが移動する理由を理解してください: https://stackoverflow.com/a/12208587/77567

したがって、ビューの変換セットを ID に設定することから始めます。ビューが変換されていない場合、その上端の中心を見つけます。

CGRect frame = view.frame;
CGPoint topCenter = CGPointMake(CGRectGetMidX(frame), CGRectGetMinY(frame));

次に、アンカーポイントを上端の中央に向けます。

view.layer.anchorPoint = CGPointMake(0.5, 0);

これで、レイヤーposition(またはビューcenter) の は、レイヤーの上端の中心の位置になります。ここで停止すると、上端の中心がアンカーポイントを変更する前の真の中心になるようにレイヤーが移動します。そのため、レイヤーpositionを少し前から上端の中央に変更します。

view.layer.position = topCenter;

レイヤーは画面上の同じ場所にとどまりますが、そのアンカー ポイントは上端の中心であるため、スケールと回転はそのポイントを固定したままにします。

于 2012-12-23T04:59:54.133 に答える