首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在一个动画中链接CAAffineTransforms?

如何在一个动画中链接CAAffineTransforms?
EN

Stack Overflow用户
提问于 2011-12-02 14:20:36
回答 1查看 610关注 0票数 0

我试着在他走的时候做一个精灵bob,但是不管我怎么做,它要么上下浮动,要么同时做两个动画,你实际上看不到它的移动。下面我已经发布了我目前拥有的代码。有没有人能纠正我?

我也尝试过使用动画代理和animationDidStop,但似乎也不起作用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-02 16:44:08

您不能将这两个变换绑定在一个动画中,就像您接近它的方式一样。该CGAffineTransformConcat创建了一个转换,表示一个接一个地进行转换。第一个将-10转换为y,第二个将+10转换为y。如果你一个接一个地做,你就回到了开始的地方。当您将结果变换指定给sprite层时,您只需告诉它根本不要移动。

您有两个选项来实现您正在寻找的目标:

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

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

另外,无论哪种方式,我都建议您使用常量作为转换值。魔术数字也将使未来的变化需要更多的努力。您还应该转向使用块动画制作UIView动画(请查阅animateWithDuration: animations :)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8357717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文