2009-11-18 47 views
1

有沒有辦法動畫啓用或禁用按鈕?我嘗試了以下,但沒有成功。我猜在這一點上,啓用屬性不能像不透明一樣動畫 - 但我希望我錯了。動畫UIBarButtonItem的啓用?

[UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1.0f]; 
    theButton.enabled = YES; 
    [UIView setAnimationDelegate:self]; 
    [UIView commitAnimations]; 

我不敢相信沒有setEnabled:(BOOL)enabled animated:(BOOL)animated方法。

回答

0

設置動畫特性(通過UIView的beginAnimations:上下文:)是:框架,邊界,中心,變換,α(蘋果文檔)。

所以,你確定你的動畫是什麼(在顏色/ alpha方面/變換動畫),並創建手動動畫(也許你將不得不使用,而不是UIView的beginAnimations CAAnimation:上下文:)

+0

沒有這些屬性應用到的UIBarButtonItem,不從UIView的繼承。 – 2017-03-21 16:48:55

+0

你是對的。但UIBarButtonItem可以包含動畫的customView。 – bealex 2017-03-21 20:53:49

0

您可以將按鈕的啓用/禁用改爲兩個重疊圖像之間不透明度的變化,每個圖像處於一種狀態或另一種狀態(即,使其看起來像淡入/淡出)。在動畫完成處理程序中,您可以執行實際的啓用/禁用切換。

0

這裏有一個想法:)

在你的動畫塊,從視圖中刪除按鈕,並用禁用狀態重新添加。您可以指定是什麼樣的製作動畫,你要在這裏..

+0

我看不到我用什麼方法從視圖中刪除UIBarButtonItem。此外,這不會導致按鈕消失作爲動畫的一部分? – 2009-11-22 15:24:38

0

Set:self.buttonSetEvent.customView.alpha = 0.2;

,並嘗試這個

CGContextRef context = UIGraphicsGetCurrentContext(); 
[UIView beginAnimations:nil context:context]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UIView setAnimationDuration:0.15]; 
[UIView setAnimationRepeatCount:2]; 
[UIView setAnimationRepeatAutoreverses:YES]; 

self.buttonSetEvent.customView.alpha = 1; 

[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; 
+0

僅當「self.buttonSetEvent」(以及該變量名稱來自哪裏?)時,才能使用自定義視圖創建。 – taxilian 2011-08-15 23:14:30

2

這其實是很容易的。 UIView.transitionWithView可以採取任何視圖的快照,並從該快照交叉溶解到視圖的新狀態。您可以使用該功能動畫進行很多更改,包括enabled

只需使用視圖控制器的視圖作爲目標視圖,指定TransitionCrossDissolve,然後像通常一樣使用動畫。

UIView.transitionWithView(self.view, 
    duration: 0.5, 
    options: UIViewAnimationOptions.TransitionCrossDissolve, 
    animations: {() -> Void in 
     self.someButton.enabled = !self.someButton.enabled 
}, completion:nil) 
+3

如果您更改導航項目的某個欄按鈕項目,請嘗試將'navigationController.navigationBar'作爲視圖傳遞,而不是'self.view'。 – 2015-04-11 20:44:42