iphone - 使用 CGAffineTransformRotate,如何将旋转设置为 0

标签 iphone ios cocoa-touch uiview cgaffinetransform

给出以下代码:

self.transform = CGAffineTransformRotate(self.transform, ?);

有没有办法在不知道当前旋转角度的情况下将旋转设置回0?我还有其他想要维护的转换,因此我使用 CGAffineTransformRotate 而不是 CGAffineTransformMakeRotation

最佳答案

如果只是缩放和旋转,那么您的选择实际上是 (i) 仅确定比例并制作该比例的全新缩放矩阵;或 (ii) 按照您的建议,确定旋转并以相反的量调整您的变换。

您可以通过查看变换矩阵的组件来实现。如果您考虑矩阵乘法的工作原理,您会得到输出 x 轴为 (transform.a, transform.b) 并且输出 y 轴为 (transform.c, transform.d )

所以,对于 (i):

// use the Pythagorean theorem to get the length of either axis;
// that's the scale, e.g.
CGFloat scale = sqrtf(
          self.transform.a*self.transform.a + 
          self.transform.b*self.transform.b);

self.transform = CGAffineTransformMakeScale(scale, scale);

对于(ii):

// use arctan to get the rotation of the x axis
CGFloat angle = atan2f(
          self.transform.b*self.transform.b, self.transform.b*self.transform.a);

self.transform = CGAffineTransformRotate(self.transform, -angle);

关于iphone - 使用 CGAffineTransformRotate,如何将旋转设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14371559/

相关文章:

iphone - 捕获卡在 DrawRect 方法中的 UIView 的 UIImage

ios - Swift - 使 Sprite Kit 节点仅受重力影响?

objective-c - 请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量

iphone - IOS [NSURL initFileURLWithPath :]: nil string parameter on loading video

ios - 如何在 Swift 中向 TableView 添加自定义单元格?

ios - 有没有办法关闭 Xcode 8 的图像名称自动完成功能?

ios - 如何从 Xcode 8 中删除坏证书?

ios - 获取使用动态图像点击的图像的标识符

ios - 给定一个对象,是否可以获取其类名并将其转换为字符串?

ios - CGContext 的背景图片