[英]Xcode Swift animation transparency error
我的目标是让label0
随着label1
更改透明度来动态更改文本。 这是我用于label1
动画的一部分代码:
UIView.animateWithDuration(2.0, animations: { () -> Void in
self.label1.alpha = 0.0
//this is what happens after "tIme"
dispatch_after(tIme1, dispatch_get_main_queue()) {
UIView.animateWithDuration(2.0, animations: { () -> Void in
self.label1.alpha = 1.0
})
dispatch_after(tIme20, dispatch_get_main_queue()) {
UIView.animateWithDuration(5.0, animations: { () -> Void in
self.label1.alpha = 0.0
})
}
}
})
它基本上是从透明开始的,在1s之后逐渐消失为完全可见,在20s之后又回到透明。 这部分代码有效^
不起作用的部分是应该更改label0
:
if(label1.alpha == 0.0) {
self.label0.text = "transparent"
}
else {
self.label0.text = "visible"
}
我想这样做是很自我解释的。 如果label1
是透明的,则使label0
说“透明”,否则说“可见”。 问题在于,即使在label1
可见的情况下,它仍然会说“透明”。
我该如何解决?
如果您需要任何澄清,请随时询问。
编辑:我不可能更改动画,因为我需要做的是在ViewDidLoad上显示一些文本,在ViewDidAppear上显示其他文本。 我可以轻松地做到这一点,但是由于它的文字不同,所以第一次打开应用程序时它会重叠。 因此,我需要做的是等待第一个文本消失,然后检查其是否不可见。 如果是这样,我可以在ViewDidAppear上显示第二个文本。
问题与这些线有关
dispatch_after(tIme1, dispatch_get_main_queue()) {
这行告诉我们的是“在tIme1秒后将此块分配到主线程”:
UIView.animateWithDuration(2.0, animations: { () -> Void in
self.label1.alpha = 1.0
})
这里的第一个问题是dispatch_after不保证该块将在tIme1之后运行。 该行保证了该块将在tIme1秒内分派到主线程。 iOS会说出何时运行。 然后,您将运行另一个异步块,该块将在iOS希望其运行时运行。
在所有这些不确定性的情况下,您如何测试alpha是0还是1?
而且,我非常确定标签的text属性不可动画。 文本将突然从一件事变成另一件事。
您需要使用以下命令连接所有动画:
UIView.animateWithDuration(2.0, animations: {
self.label1.alpha = 0.0
self.label0.text = "transparent"
}, completion: { // first animation is complete... running this block
(value: Bool) in
UIView.animateWithDuration(2.0, animations: {
self.label1.alpha = 1.0
self.label0.text = "visible"
}, completion: { // second animation is complete... running this block
(value: Bool) in
UIView.animateWithDuration(20.0, animations: {
self.label1.alpha = 0.0
self.label0.text = "transparent"
})
})
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.