iphone sdk CGAffineTransform获取物体的旋转角度

nat*_*iah 32 cocoa-touch ios

我如何计算任何给定物体的旋转角度(即uiimageview)?

ken*_*ytm 91

从技术上讲,你不能,因为变换可以包括一个倾斜操作,它将图像转换为平行四边形,并且不再定义旋转角度.

无论如何,因为旋转矩阵产生

 cos(x)  sin(x)   0
-sin(x)  cos(x)   0
   0        0     1
Run Code Online (Sandbox Code Playgroud)

你可以恢复角度

return atan2(transform.b, transform.a);
Run Code Online (Sandbox Code Playgroud)

  • @openfrog:http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html#//apple_ref/doc/uid/TP30000946-CH2g-BBCJFFAE (2认同)

sch*_*sch 36

您可以像这样轻松获得旋转角度:

CGFloat angle = [(NSNumber *)[view valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
Run Code Online (Sandbox Code Playgroud)

例如:

view.transform = CGAffineTransformMakeRotation(0.02);
CGFloat angle = [(NSNumber *)[view valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
NSLog(@"%f", angle); // 0.020000
Run Code Online (Sandbox Code Playgroud)

文档:

Core Animation扩展了键值编码协议,允许通过关键路径获取和设置图层CATransform3D矩阵的公共值.表4描述了层的转换和sublayerTransform属性是键值编码和遵守观察的关键路径

  • @ RichardJ.RossIII - 这是:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html#//apple_ref/doc/uid/TP40006082-SW17 (2认同)