2012-06-10 79 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 –