2010-12-14 3 views
12

私はiPadアプリを作成しており、現在のビューのサイズでユーザーを更新したいと考えています。私は、CGAffineTransformのスケールを計算し、xScaleに(関連するビューの)幅とyScaleの高さを掛け合わせることでこれを行うことがありました。私はこれをやり続けたいと思いますが、私はもはや2次元変換をやっていません。CATransform3Dからスケール情報を抽出するためにどのような式を使うべきでしょうか。CATransform3Dから 'スケール'を取得

お手伝いできますか?

答えて

19

あなただけの層の上にvalueForKeyPath:を行う層の現在の規模を取得するには:

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

他のキーは、これは素晴らしい仕事をApples Core Animation Programming Guide

+0

で見つけることができます!承認された回答でなければなりません。 – Collin

+0

非常に便利です:) Tks a lot! – TonyMkenu

+0

面白いですが、いつもnil [[self presentationLayer] valueForKey:@ "transform.scale"] – Andy

8

私はAPIに精通していませんが、CATransform3Dは3D変換を行うための通常の4x4変換マトリックスのようです。

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

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

CATransform3DMakeTranslationのドキュメントからは、CATransform3Dが本当に行優先であるようです。

関連する問題