21

の現在のスケール(ズームレベル)をどのように見つけますUIViewか?

4

6 に答える 6

51

ビューにスケール変換を適用している場合、その変換はUIViewのtransformプロパティを介して(適切に)利用可能になります。CGAffineTransformのドキュメントによると、スケール変換は、変換行列の座標(1,1)と(2,2)でゼロ以外の値を持ちます。したがって、次のようにして、xスケールとyスケールの係数を取得できます。

CGFloat xScale = view.transform.a;
CGFloat yScale = view.transform.d;
于 2012-08-20T15:10:00.560 に答える
12

このソースによると、このメソッドを使用すると、変換に適用される回転または平行移動に関係なく、スケールが得られます。

func scale(from transform: CGAffineTransform) -> Double {
    return sqrt(Double(transform.a * transform.a + transform.c * transform.c));
}

私はパーティーに遅れていることを知っていますが、私の場合、受け入れられた答えはうまくいきませんでした。

于 2017-09-14T15:38:36.560 に答える
3

CGAffineTransform変換行列に関するいくつかの計算を使用して、スケールを計算できます。これはマーガレットのコメントでも言及されています。Swiftを使用すると、計算されたプロパティを使用して単純な拡張機能を記述できます。

extension CGAffineTransform {
    var scale: Double {
        return sqrt(Double(a * a + c * c))
    }
}

scaleしたがって、後で次のように、を直接呼び出すことで使用できますCGAffineTransform

let someViewScale = someView.transform.scale
于 2019-09-30T19:21:33.180 に答える
1

その機能はUIScrollViewとそのzoomScaleプロパティで提供されます。

編集:

現在のスケールを知ることは、変換行列によって与えられます。ご存知のように、スケール値は次のとおりです。

sx, 0,  0
0 , sy, 0
. . .. ,1. 

現在の状態を取得するには、トランスフォームの状態を記録するだけです。ただし、その状態に戻るには、最後の変換の逆行列を使用するか、単位行列をロードする必要があります。

于 2012-08-20T15:03:06.977 に答える
1

これをチェックしてください....これでは、を使用して最小および最大ズームスケールを設定する方法を学ぶことができます.... UIPinchGestureRecognizerUIPinchGestureRecognizerを使用して最小および最大ズームスケールを設定する方法

于 2012-08-20T15:14:29.720 に答える
0

それはcontentScaleFactor参照)ではありませんか?

于 2012-08-20T15:09:25.383 に答える