の現在のスケール(ズームレベル)をどのように見つけますUIView
か?
6 に答える
ビューにスケール変換を適用している場合、その変換はUIViewのtransform
プロパティを介して(適切に)利用可能になります。CGAffineTransformのドキュメントによると、スケール変換は、変換行列の座標(1,1)と(2,2)でゼロ以外の値を持ちます。したがって、次のようにして、xスケールとyスケールの係数を取得できます。
CGFloat xScale = view.transform.a;
CGFloat yScale = view.transform.d;
このソースによると、このメソッドを使用すると、変換に適用される回転または平行移動に関係なく、スケールが得られます。
func scale(from transform: CGAffineTransform) -> Double {
return sqrt(Double(transform.a * transform.a + transform.c * transform.c));
}
私はパーティーに遅れていることを知っていますが、私の場合、受け入れられた答えはうまくいきませんでした。
CGAffineTransform変換行列に関するいくつかの計算を使用して、スケールを計算できます。これはマーガレットのコメントでも言及されています。Swiftを使用すると、計算されたプロパティを使用して単純な拡張機能を記述できます。
extension CGAffineTransform {
var scale: Double {
return sqrt(Double(a * a + c * c))
}
}
scale
したがって、後で次のように、を直接呼び出すことで使用できますCGAffineTransform
。
let someViewScale = someView.transform.scale
その機能はUIScrollViewとそのzoomScaleプロパティで提供されます。
編集:
現在のスケールを知ることは、変換行列によって与えられます。ご存知のように、スケール値は次のとおりです。
sx, 0, 0
0 , sy, 0
. . .. ,1.
現在の状態を取得するには、トランスフォームの状態を記録するだけです。ただし、その状態に戻るには、最後の変換の逆行列を使用するか、単位行列をロードする必要があります。
これをチェックしてください....これでは、を使用して最小および最大ズームスケールを設定する方法を学ぶことができます.... UIPinchGestureRecognizer
UIPinchGestureRecognizerを使用して最小および最大ズームスケールを設定する方法
それはcontentScaleFactor
(参照)ではありませんか?