这是我的代码 我马上得到了打印输出。 我希望在此期间更改我的uiview的背景颜色。
func animate() {
UIView.animateWithDuration(3.0, delay: 0.0, options:
UIViewAnimationOptions.CurveLinear, animations: {
//self.grid.backgroundColor = UIColor.redColor()
println("1")
UIView.animateWithDuration(1.0, delay: 1.0, options: UIViewAnimationOptions.CurveLinear, animations: {
//self.grid.backgroundColor = UIColor.clearColor()
println("2")
},
completion: {
(finished: Bool) - > Void in
println("3")
})
}, completion: {
(finished: Bool) - > Void in
println("4")
})
}
答案 0 :(得分:2)
你想要制作动画的东西是不可动画的。通过检查您的代码我理解您正在尝试使视图透明。
您可以通过将视图的alpha设置为零来实现此目的。 (Alpha是可动画的)。
与红色相同。尝试使用图层背景颜色
另请注意,animationWithDuration不会延迟值的赋值,值会立即分配
UIView.animateWithDuration(3.0, delay: 0.0, options:UIViewAnimationOptions.CurveLinear, animations: {
self.grid.layer.backgroundColor = UIColor.redColor().CGColor
UIView.animateWithDuration(1.0, delay: 1.0, options: UIViewAnimationOptions.CurveLinear, animations: {
self.grid.alpha = 0
},
completion: {(finished: Bool) - > Void in})
}, completion: {(finished: Bool) - > Void in})}
答案 1 :(得分:1)
有几件事。只有一些东西是可动画的。 println()不可动画。
其次,不清楚在UIView.animateWithDuration的另一个调用的动画块中嵌套对UIView.animateWithDuration的调用会做什么。
在外部UIView.animateWithDuration调用的完成块内嵌套第二次调用UIView.animateWithDuration是合理的,但不在动画块中。
可能是动画的代码被注释掉了,所以你希望完成什么?
这是一个IBAction方法,可以将视图的背景颜色从白色变为红色,然后再变回白色。它完美地运作:
@IBAction func handleAnimateButton(sender: UIButton)
{
sender.enabled = false
UIView.animateWithDuration(NSTimeInterval(0.2),
delay: NSTimeInterval(0.5),
options: UIViewAnimationOptions.CurveEaseInOut,
animations:
{
self.aView.backgroundColor = UIColor.redColor()
},
completion:
{
This code gets called when the first animation finished.
(value: Bool ) in
//Create a new animation to switch the BG color back to white
UIView.animateWithDuration(NSTimeInterval(0.5),
animations:
{
self.aView.backgroundColor = UIColor.whiteColor()
},
completion:
{
(value: Bool ) in
sender.enabled = true
}
)
}
)
}
请注意,第二个动画调用位于第一个动画调用的完成块内。
答案 2 :(得分:0)
我认为您遇到的问题是您在另一个animateWithDuration
内调用delay
选项。这可能会破坏程序。你应该解决这个问题。
希望有所帮助:)
答案 3 :(得分:0)
我没有专家,但Duncan在第一个动画的完成块中嵌套第二个动画的答案应该适合你。我不得不删除最后一个" sender.enabled = true"一块让它工作。那说,如果有任何读者'时间问题没有解决,这里有其他我读过的选项...
使用NSTimeInterval: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/
或使用盛大的中央调度(功能强大,但很复杂): http://www.raywenderlich.com/79149/grand-central-dispatch-tutorial-swift-part-1
显然iOS有一种新方法: http://commandshift.co.uk/blog/2014/04/01/stop-nesting-animation-blocks/
同样,我认为有序动画可以通过完成块方法获得,但这些是一些替代方案。