gpt4 book ai didi

objective-c - 使用 CGAffineTransform 的奇怪结果

转载 作者:行者123 更新时间:2023-12-01 18:00:49 26 4
gpt4 key购买 nike

我正在尝试使用多个 CGAffineTransforms 将动画串在一起。和 CGAffineTransformConcats .我试图实现的总体目标是让我的图像在向上移动 50 像素的同时旋转 45 度,然后在向下移动时再旋转 45 度。

 CGAffineTransform translateUp = CGAffineTransformMakeTranslation(0, -50);
CGAffineTransform firstSpin = CGAffineTransformMakeRotation(M_PI_4);
CGAffineTransform translateDown = CGAffineTransformMakeTranslation(0, 50);
CGAffineTransform secondSpin = CGAffineTransformMakeRotation(M_PI_4);
CGAffineTransform transform1 = CGAffineTransformConcat(translateUp, firstSpin);
CGAffineTransform transform2 = CGAffineTransformConcat(translateDown, secondSpin);
CGAffineTransform transformFull = CGAffineTransformConcat(transform1, transform2);
[UIView beginAnimations:@"MoveAndRotate" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5];
mainCharacterImage.transform = transformFull;
[UIView commitAnimations];

现在请注意,我对所有与 CG 相关的东西都很陌生,但我不明白为什么这不起作用。

但是我不认为这是一个奇怪的部分,我的问题主要是,谁能向我解释为什么上面的代码导致我的图像不仅向上移动和旋转,而且移动右边大约 100 像素?

任何建议都非常感谢!

最佳答案

因为transformFull是 ((translateUp*firstSpin)*(translateDown*secondSpin)) 的矩阵乘法的结果。您的动画直接从起点到计算此矩阵乘法的结果,恰好是:

0, 1, 0
-1, 0, 0
50 - 25 * sqrt(2), 25 * sqrt(2), 1

这个变换矩阵恰好将项目向右移动了大约 100 个像素。

变换矩阵没有历史。它无法说出是什么步骤使它达到了该值并完成了这些步骤。相反,你必须有意识地移动到每一步。尝试分两个阶段制作此动画。移动 mainCharacterImagetransform1 .然后移动到一个新的变换,它只是一个 π/2 的旋转。

关于objective-c - 使用 CGAffineTransform 的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222620/

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