我正试图在他走路的时候制作精灵鲍勃,但无论我做什么,它都会翘起并停留,或者它同时做两个动画而你实际上并没有看到动作。下面我发布了我目前的代码。有人可以纠正我吗?
我也尝试过使用动画代理并使用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;
}
答案 0 :(得分:1)
您不能像接近它那样在一个动画中将这两个变换绑定在一起。 CGAffineTransformConcat创建一个转换,表示在另一个之后执行一个转换。第一个为y转换-10,然后第二个转换为y为+10。如果你一个接一个地做,你就回到了你开始的地方。将结果变换分配给精灵图层时,只需告诉它不要移动。
您有两种方法可以实现您的目标:
选项1:查看关键帧动画(查找CAKeyframeAnimation)。这些将允许您通过动画指定不同点的属性状态。这可能需要更多的学习,但最终结果可能更具可读性和可维护性。
选项2:有两个动画 - 每个翻译一个。在每个动画结束时,如果您想继续摆动,则触发另一个动画。如果您需要稍后进行更改,这可能会让您感到困惑和难以跟上。
另外,无论哪种方式,我建议您使用常量来表示翻译价值。魔术数字也将使未来的变化需要更多的努力。您还应该为UIView动画使用块动画(查找animateWithDuration:动画:)