很新的这件事对不起!
一旦我运行,按下“按”UIView的背景色“背景”立即变成蓝色,然后动画变成紫色,完全跳过动画到黄色,然后变成蓝色。
我做错了什么?
@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")
})
}
发布于 2015-01-14 17:42:24
在一个单一的调用中,不能将多个状态的更改为相同的属性。它将只是动画到最后的状态变化(如在您的情况下)。相反,您可以使用completionBlock
将它们链接在一起。
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
之后启动。
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);
发布于 2015-01-14 17:36:49
是的,因为这只是一个属性的改变。你需要连续三次制作不同的动画。首先动画变成黄色,当这结束时,现在把一个全新的动画变成蓝色,然后把一个全新的动画变成紫色。
链接它们的最简单的方法是将每个新的动画放在上一个动画的完成处理程序中。像这样(您需要更改其他一些东西,因为我拒绝编写函数和变量以大写开头的代码):
@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上还有一种更优雅(但更难)的方法,就是使用关键帧动画。但是要开始,我建议你先用简单的方法去做!
https://stackoverflow.com/questions/27955494
复制相似问题