2015-09-04 87 views
0

我的目标是让label0动态更改文本为label1更改透明度。 这里为i用于label1的动画的代码的一部分:Xcode Swift动画透明度错误

 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它返回到是透明的。 这部分代码WORKS^

不工作是应该使label0变化的一个部分时间:

 if(label1.alpha == 0.0) { 
     self.label0.text = "transparent" 
    } 
    else { 
     self.label0.text = "visible" 
    } 

什么,我想这是做的是非常自我解释。如果label1是透明的,则使label0说“透明”或者说“可见”。问题是,即使label1可见,它仍然会说“透明”。

我该如何解决这个问题?

如果您需要任何澄清,请不要犹豫,问。

编辑:我不可能改变动画,因为我需要做的是在ViewDidLoad和ViewDidAppear上的其他文本上显示一些文本。我可以很容易地,但由于其不同的文本,我第一次打开应用程序将重叠。所以我需要做的是等待第一个文本消失,然后检查它是否看不见。如果是,在ViewDidAppear上,我可以显示我的第二个文本。

+0

当你想到它是'0.0'什么是label1.alpha'的'实际价值? –

+0

你是什么意思?我最初设置label1.aplha为0.0,当它的0.0我不能在画布上看到它 – ChubbyChocolate

+0

可以显示更多关于'if(label1.alpha == 0.0){ self.label0.text =“transparent” } else { self.label0.text =“visible” }'?你把它放在哪里? – anhtu

回答

0

问题是关系到这些线路

dispatch_after(tIme1, dispatch_get_main_queue()) { 

这行告诉是“调度此块主线程时间1秒后”:

UIView.animateWithDuration(2.0, animations: {() -> Void in 
     self.label1.alpha = 1.0 
}) 
这里

第一个问题是dispatch_after并不能保证块将在tIme1之后运行。该行确保该块将在tIme1秒内发送到主线程。 iOS会说它什么时候会运行。然后你运行另一个异步模块,并在iOS需要运行时运行。

如何测试alpha是0还是1以及所有这些不确定性?

而且,我很确定标签的文本属性不是可以动画的。文本会突然从一件事变成另一件事。

你需要什么是连接使用这个所有的动画:

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" 
      }) 
    }) 
}) 
+0

它不可能改变动画,因为我需要做的是在ViewDidLoad上显示一些文本,并在ViewDidAppear上显示其他文本。我可以很容易地,但由于其不同的文本,我第一次打开应用程序将重叠。所以我需要做的是等待第一个文本消失,然后检查它是否看不见。如果是,在ViewDidAppear上,我可以显示我的第二个文本。 – ChubbyChocolate

+0

ViewDidLoad是屏幕上没有显示任何内容的阶段。如果你没有看到任何东西,你打算如何在这个阶段显示文字? – SpaceDog

+0

该文本和动画已经在ViewDidLoad及其工作 – ChubbyChocolate