2012-06-10 94 views

回答

0

試試這個:

CGFloat skew_c = [(NSNumber *)[view valueForKeyPath:@"layer.transform.c"] floatValue]; 

的keyPath是guesstimated,但應工作。 CGAffineTransformMake docs

編輯:

看起來CGAffineTransform被轉換成4×4矩陣CATransform3D

transform屬於CALayerof CATransform3D類型。

這意味着你可以存取權限m11 .. m44參數與像電話:

CGFloat m11 = [(NSNumber *)[view valueForKeyPath:@"layer.transform.m11"] floatValue]; 
... 
... 
CGFloat m44 = [(NSNumber *)[view valueForKeyPath:@"layer.transform.m44"] floatValue]; 

你會仍然需要做一些計算來獲得你的歪斜的因素。你可以從this great answer得出你的c_factor的公式。

+0

我不明白怎麼做呢=( – xXDraklordXx

+0

我也想弄明白,問題是你給'CGAffineTransformMake'的參數被翻譯成另一種矩陣,所以你不能得到他們通過簡單地閱讀他們回來[3D投影 - 維基](http://en.wikipedia.org/wiki/3D_projection#Perspective_projection)也是有用的,但相當複雜。 –

+0

這對我來說太複雜了 – xXDraklordXx

1

你可以嘗試這樣的事情:

CGFloat angle = [(NSNumber *)[view valueForKeyPath:@"layer.transform.rotation.z"] floatValue]; 
+0

它不起作用,結果總是0 – xXDraklordXx

+0

斯克拉姆看法是正確的,只有的keyPath是錯誤的。 –

1

試試這個:

CGFloat radians = atan2f([self myview].transform.b, [self myview].transform.a); 

有了這個,你可以得到任何UIView的當前角度。

保持搖...喜歡... :)

+0

來自1位用戶的令人印象深刻的答案! – Fattie

+0

謝謝。 Fattie –