CGAffineTransformRotate行为在视图和视图控制器之间不一致

时间:2013-03-24 11:13:06

标签: ios rotation cgaffinetransform

我正在尝试复制Music.app的音量拇指反射。我创建了一个demo project 微调数学。

首先,我在控制器中设置视图动画以保持简单。完成后,我决定创建一个自定义ReflectedKnobView,以便我可以在其他项目中使用它。我将相关代码从控制器复制到视图中。

即使我完全按照控制器中的方式复制了我的代码(进行相关修改),但是当我运行应用程序时,视图的行为与控制器的不同。

ReflectedKnobView中,CGAffineTransformRotate()会以不可预测的方式扭曲和变换视图。

我复制的代码:

- (void)updateValues
{    
CMRotationRate data = self.mManager.gyroData.rotationRate;

self.xLabel.text = [NSString stringWithFormat:@"%f", RadiansToDegrees(data.x)];
self.yLabel.text = [NSString stringWithFormat:@"%f", RadiansToDegrees(data.y)];
self.zLabel.text = [NSString stringWithFormat:@"%f",RadiansToDegrees(data.z)];

[UIView animateWithDuration:1/20 animations:^{
    self.level3Left.transform = CGAffineTransformRotate(self.level3Left.transform, ((data.y / 240) + (data.x / 200)));
    self.level3Right.transform = CGAffineTransformRotate(self.level3Right.transform, ((-1 * data.y) / 240) + (data.x / 200));
}];
}

level3<Right/Left>UIImageView

我怀疑CGAffineTransformRotate()的行为有所不同,因为我在一个案例的视图中调用它,而在另一个案例中调用一个控制器。

如果您没有得到我在这里说的话,请下载demo project并在设备上运行。

1 个答案:

答案 0 :(得分:0)

我刚刚在另一个问题How do I calculate the affine translation parameters when rotating a view in iOS?

上做了类似的回答

以下是对此的重述:

你需要注意旋转中的两件事 - 你的锚点(旋转发生的点)和视图或viewController的尺寸。

原始观点:

enter image description here

如果您的锚点位于角落,它会像这样旋转:

enter image description here

如果你的锚点在中间,它会像这样旋转:

enter image description here

如果您有方形图层,视图或视图控制器,它往往会很好地旋转。旋转时,矩形视图似乎会做一些奇怪的事情,但是如果你知道尺寸差异,你可以调整它。