2015-09-04 68 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