我正在尝试使用几个CGAffineTransformsCGAffineTransformConcats将动画串在一起。我试图实现的总体目标是使图像旋转45度,同时向上移动50 px,然后在图像回落的过程中再旋转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像素。

转换矩阵没有历史记录。它无法说出是什么步骤使它达到了该价值并逐步执行这些步骤。相反,您必须有意识地移至每个步骤。尝试分两个阶段制作此动画。将mainCharacterImage移到transform1。然后转到一个仅旋转π/ 2的新变换。

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

10-13 08:05