Music.app のボリューム サム リフレクションを複製しようとしています。 数学を微調整するデモ プロジェクトを作成しました。
最初は、コントローラー内のビューをアニメーション化してシンプルにしていました。それを行った後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()
ある場合はビューで呼び出し、別の場合はコントローラーで呼び出しているため、動作が異なると思われます。
ここで言っていることが理解できない場合は、デモ プロジェクトをダウンロードしてデバイスで実行してください。