首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIView动画跳过第一个动画

UIView动画跳过第一个动画
EN

Stack Overflow用户
提问于 2015-01-15 01:33:08
回答 2查看 663关注 0票数 0

很新的这件事对不起!

一旦我运行,按下“按”UIView的背景色“背景”立即变成蓝色,然后动画变成紫色,完全跳过动画到黄色,然后变成蓝色。

我做错了什么?

代码语言:javascript
复制
  @IBAction func Press(sender: AnyObject) {

UIView.animateWithDuration(5, animations: {
self.Background.backgroundColor = UIColor.yellowColor()
self.Background.backgroundColor = UIColor.blueColor()
self.Background.backgroundColor = UIColor.purpleColor()
}, completion:{(Bool)  in
println("COLOR CHANGED")
})
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-15 01:42:24

在一个单一的调用中,不能将多个状态的更改为相同的属性。它将只是动画到最后的状态变化(如在您的情况下)。相反,您可以使用completionBlock将它们链接在一起。

代码语言:javascript
复制
UIView.animateWithDuration(5/3.0, animations: {

    self.view.backgroundColor = UIColor.yellowColor()

    }, completion:{ finished1 in
        UIView.animateWithDuration(5/3.0, animations: {

            self.view.backgroundColor = UIColor.blueColor()

            }, completion:{finished2  in
                UIView.animateWithDuration(5/3.0, animations: {

                    self.view.backgroundColor = UIColor.purpleColor()

                    }, completion:{finished3  in

                        println("COLOR CHANGED")
                })
        })
})

或者您可以使用关键帧动画,指定中间帧,如下所示。relativeDuration应该是0到1之间的值,指示一个关键帧的相对持续时间。例如,如果整个动画是3 seconds,而relativeDuration是(1/3),那么该关键帧将为3/3 = 1第二代动画。

relativeStartTime也是关键帧相对于整个动画的持续时间开始的相对时间。例如,如果整个动画是3 seconds,而relativeStartTime是(1/3),那么关键帧将在1 second之后启动。

代码语言:javascript
复制
var duration = 5.0;
var relativeDuration = 1.0/3;

UIView.animateKeyframesWithDuration(duration, delay: 0, options: nil, animations: {
    UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: relativeDuration, animations: {
        self.view.backgroundColor = UIColor.yellowColor()
    })
    UIView.addKeyframeWithRelativeStartTime(relativeDuration, relativeDuration: relativeDuration, animations: {
        self.view.backgroundColor = UIColor.blueColor()
    })
    UIView.addKeyframeWithRelativeStartTime(2 * relativeDuration, relativeDuration: relativeDuration, animations: {
        self.view.backgroundColor = UIColor.purpleColor()

    })
    }, completion:nil);
票数 3
EN

Stack Overflow用户

发布于 2015-01-15 01:36:49

是的,因为这只是一个属性的改变。你需要连续三次制作不同的动画。首先动画变成黄色,当这结束时,现在把一个全新的动画变成蓝色,然后把一个全新的动画变成紫色。

链接它们的最简单的方法是将每个新的动画放在上一个动画的完成处理程序中。像这样(您需要更改其他一些东西,因为我拒绝编写函数和变量以大写开头的代码):

代码语言:javascript
复制
@IBAction func press(sender: AnyObject) {
    UIView.animateWithDuration(5.0/3.0, animations: {
        self.background.backgroundColor = UIColor.yellowColor()
        }, completion:{(Bool)  in
            UIView.animateWithDuration(5.0/3.0, animations: {
                self.background.backgroundColor = UIColor.blueColor()
                }, completion:{(Bool)  in
                    UIView.animateWithDuration(5.0/3.0, animations: {
                        self.background.backgroundColor = UIColor.purpleColor()
                        }, completion:{(Bool)  in
                            println("COLOR CHANGED")
                    })
            })
    })
}

在iOS 8上还有一种更优雅(但更难)的方法,就是使用关键帧动画。但是要开始,我建议你先用简单的方法去做!

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

https://stackoverflow.com/questions/27955494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档