15

iPadアプリを作成していて、ビューの現在のサイズでユーザーを更新したいと思います。以前は、CGAffineTransformのスケールを計算し、xScaleに(関連するビューの)幅を掛け、yScaleに高さを掛けてこれを行っていました。これを続けたいのですが、2D変換を行っていないため、CATransform3Dからスケール情報を抽出するためにどの式を使用すればよいかわかりません。

手伝ってくれますか?

4

3 に答える 3

22

レイヤーの現在のスケールを取得するには、レイヤーに対してaを実行するだけですvalueForKeyPath:

CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue];

その他のキーは、ApplesCoreAnimationプログラミングガイドに記載されています。

于 2011-08-22T04:15:22.470 に答える
8

私はAPIに精通していませんが、CATransform3D3D変換を行うための通常の4x4変換行列のように見えます。

CATransform3Dスケール、回転、および平行移動の組み合わせにすぎないと仮定すると、スケール係数は、それぞれ行または列のメジャーであるかどうかに応じて、左上の3x3の行または列の大きさを計算することによって抽出できます。

たとえば、行メジャーの場合、x方向のスケールは(m11 * m11)+(m12 * m12)+(m13 * m13)の平方根になります。yとzのスケールは、同様に2番目と3番目の行の大きさになります。

そのためのドキュメントから、CATransform3DMakeTranslationそれCATransform3Dは確かに行メジャーであるように見えます。

于 2010-12-14T22:56:35.000 に答える
0

これがSwift4+の最新の回答です

guard let currentScaleX = view.layer.value(forKeyPath: "transform.scale.x") as? CGFloat {
    return 
}
print ("the scale x is \(currentScaleX)")
guard let currentScaleY = view.layer.value(forKeyPath: "transform.scale.y") as? CGFloat {
    return 
}
print ("the scale y is \(currentScaleY)")
于 2019-11-04T16:07:46.993 に答える