2013-10-14 67 views
0

我想在按下「錯誤答案」按鈕時讓按鈕的文本「消失」。iOS:動畫UIButton的文本位置不起作用

在我的問題演示代碼中,我的項目有兩個按鈕,一個帶有插座'myBtn',沒有任何動作,另一個帶有TouchUpInside動作。操作處理程序是這樣的:

- (IBAction)goPressed:(UIButton*)sender { 

//UILabel *lbl = self.myBtn.titleLabel; 
UILabel *lbl = sender.titleLabel; 
[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
        lbl.center = CGPointMake(lbl.center.x-60, lbl.center.y); 
        lbl.alpha = 0; 
       } 
       completion:nil]; 
} 

我試圖動畫兩個屬性:「阿爾法」去從1到0,和文本的位置移動60點到左邊。

如果我取消註釋第一個「UILAbel」行並評論第二行,然後按下按鈕在第二個按鈕中運行一個不錯的動畫。

但是,如果我將代碼保留爲顯示狀態,嘗試對按下按鈕本身的文本進行動畫處理,但alpha的動畫效果不錯,但位置不變。

任何幫助將不勝感激!

+0

嘗試使用sender.currenttitle –

+0

爲什麼不動畫整個按鈕/設置文本爲「」? –

+0

CurrentTitle是NSString,所以我不能動畫它的位置。 – ishahak

回答

2

我在iOS7上看到過這種問題。在IBAction中運行良好的動畫不適用於iOS7。我必須將所有動畫代碼移至其他方法,並在延遲後調用選擇器。您的代碼將正常工作,如果你這樣做 -

- (IBAction) goPressed:(UIButton*)sender { 
[self performSelector:@selector(animateButton:) withObject:sender afterDelay:0.1]; 
} 

- (void) animateButton:(UIButton *) button{ 
UILabel *lbl = button.titleLabel; 
[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
        lbl.center = CGPointMake(lbl.center.x-60, lbl.center.y); 
        lbl.alpha = 0; 
       } 
       completion:nil]; 
} 
+0

非常感謝凱達。它像一個魅力!即使延遲了0.05。 這很有趣,因爲延長几秒鐘的動畫本身並沒有解決問題... – ishahak

+0

@Kedar這是一個錯誤?因爲這有助於我甚至不知道爲什麼=/ –

0

您的問題是與UILabel混合起來UIButton

方法參數(UIButton*)sender在這種情況下引用UIButton。原因UILabel *lbl = sender.titleLabel;不起作用是因爲senderUIButton參考。要訪問標籤對象,您必須通過hirarchy sender > UIButton > UILabel引用嵌入在UIButton中的UILabel

所以,你應該使用的代碼是:

UIButton *button = sender; 
UILabel *lbl = sender.titleLabel; 
[UIView animateWithDuration:1.0 
        delay:0.0 
       options:UIViewAnimationOptionCurveEaseOut 
      animations:^{ 
       lbl.center = CGPointMake(lbl.center.x-60, lbl.center.y); 
       lbl.alpha = 0; 
      } 
     completion:nil]; 
} 

之所以因爲它出現的行爲strangly代碼是因爲alphaUIButton S和UILabel s的性能。因此,即使您錯誤地重新登錄sender,它也會起作用。

+0

謝謝你的迴應安德魯,但我沒有明白你的觀點。我不會在我的代碼中混淆任何東西。發件人是一個UIButton,我正確地使用它的titleLabel。我會檢查凱達的解決方案並儘快報告 – ishahak