gpt4 book ai didi

ios - CGAffineTransformRotate 和 M_PI 不一致(Objective-C,iOS)

转载 作者:可可西里 更新时间:2023-11-01 05:04:45 24 4
gpt4 key购买 nike

我正在尝试在 Objective-C 中进行简单的旋转,但马上就会出现一些问题。一件事是我从 CGAffineTransformRotate 得到的不一致以及在该函数内部使用时 M_PI 如何不一致。

假设我这样做,并将它附加到一个按钮上。当我按下一次它会逆时针旋转 180 度(很好并遵循文档)但是当我再次按下它时,它会旋转 180 度 顺时针 即使值不是负数。将 M_PI 更改为 -M_PI 会做完全相同的事情,而旋转没有差异:

[UIView animateWithDuration:secs delay:0.0 options:option
animations:^{
self.transform = CGAffineTransformRotate(self.transform, M_PI); //Inconsistent
} completion:nil];

现在假设我将 M_PI 更改为 3.141593,这是打印时 M_PI 包含的值。现在,当我按下按钮时,它完全可以正常工作。两次,它都会逆时针旋转 180 度。当我将其更改为 -3.141593 时,顺时针方向它也能正常工作:

self.transform = CGAffineTransformRotate(self.transform, 3.141593);   //Works

当我更多地使用它时,行为会变得更奇怪。

假设我想旋转 90 度 (pi/2)。 M_PI 现在具有与使用值相同的行为,但旋转与应有的相反:

//Should be Clockwise but rotates CounterClockwise
self.transform = CGAffineTransformRotate(self.transform, -M_PI/2);
self.transform = CGAffineTransformRotate(self.transform, -1.5707965);

//Should be CounterClockwise but rotates Clockwise
self.transform = CGAffineTransformRotate(self.transform, M_PI/2);
self.transform = CGAffineTransformRotate(self.transform, 1.5707965);

如果我想旋转任何超过 180 度 (PI) 的东西,即使我指定了正向或反向旋转,行为也只是旋转最短路线。当我旋转 360 度 (2PI) 时,它甚至不旋转。

为什么会发生这些事情,我该怎么做才能使它更一致?我的第二个问题是如何将物体旋转 270 度和 360 度。

最佳答案

问题是在使用 animateWithDuration 时您无法真正控制旋转方向。它总是走最短路线。旋转 180 度时,行为是不确定的,因为理论上最短路线有 2 种可能性。这也解释了为什么不能旋转超过 180 度。如果您想更好地控制动画或制作更复杂的动画,请使用 CAKeyframeAnimation。

关于ios - CGAffineTransformRotate 和 M_PI 不一致(Objective-C,iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12786981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com