gpt4 book ai didi

objective-c - 如何在一个动画中链接 CAAffineTransforms?

转载 作者:行者123 更新时间:2023-11-29 04:53:52 25 4
gpt4 key购买 nike

我试图让 Sprite 在行走时摆动,但无论我做什么,它要么向上摆动并保持不变,要么同时执行两个动画,而您实际上看不到该运动。下面我发布了我当前的代码。有人可以纠正我吗?

我还尝试使用动画委托(delegate)和使用animationDidStop,但它似乎也不起作用。

- (void)walkAnimation {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationRepeatCount:2];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatAutoreverses:TRUE];
CGAffineTransform bobUP = CGAffineTransformMakeTranslation(0, -10);
//CGAffineTransform bobDOWN = CGAffineTransformMakeTranslation(0, +10);
//CGAffineTransform bob = CGAffineTransformConcat(bobUP, bobDOWN);
_spriteLayer.affineTransform = bobUP;
[UIView commitAnimations];
_spriteLayer.affineTransform = CGAffineTransformIdentity;
}

最佳答案

您无法按照您接近它的方式将这两个变换在一个动画中结合在一起。 CGAffineTransformConcat 创建一个变换,表示一个接着一个变换。第一个将 y 平移 -10,然后第二个将 y 平移 +10。如果你一个接一个地做,你就会回到你开始的地方。当您将生成的变换分配给 Sprite 层时,您只需告诉它根本不要移动。

您有两种选择来实现您的目标:

选项 1:查看关键帧动画(查找 CAKeyframeAnimation)。这些将让您通过动画指定不同点的属性状态。这可能需要更多的学习,但最终结果可能会更具可读性和可维护性。

选项 2:有两个动画 - 每个翻译一个。在每个动画结束时,如果您希望继续摆动,请触发另一个动画。如果您稍后需要进行更改,这可能会令人困惑且难以跟上。

此外,无论哪种方式,我建议使用常量作为您的翻译值。神奇的数字也将使 future 的改变需要更多的努力。您还应该转向使用 UIView 动画的 block 动画(查找 animateWithDuration:animations:)

关于objective-c - 如何在一个动画中链接 CAAffineTransforms?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8357717/

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