我正在尝试复制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并在设备上运行。
答案 0 :(得分:0)
我刚刚在另一个问题How do I calculate the affine translation parameters when rotating a view in iOS?
上做了类似的回答以下是对此的重述:
你需要注意旋转中的两件事 - 你的锚点(旋转发生的点)和视图或viewController的尺寸。
原始观点:
如果您的锚点位于角落,它会像这样旋转:
如果你的锚点在中间,它会像这样旋转:
如果您有方形图层,视图或视图控制器,它往往会很好地旋转。旋转时,矩形视图似乎会做一些奇怪的事情,但是如果你知道尺寸差异,你可以调整它。