2015-01-06 47 views
1

更新UIButton的狀態過渡動畫不工作的setEnabled或setHighlighted

動畫正在爲setEnabled=NO

UIScrollView被滾動的setEnabled=YES動畫被觸發,UIButton是滾動視圖內,當UIScrollView做滾動的setEnabled=NO動畫被觸發。

所以,我認爲爲什麼動畫setEnabled=YES不工作的原因是因爲視圖正在移動。我不確定,但這似乎是迄今爲止我發現的唯一合理解釋。我使用dispatch_after()進行了測試,動畫也適用於setEnabled,換句話說,如果動畫在視圖不移動的情況下觸發,則動畫正在工作。

我需要做什麼?

我有兩個不同的背景圖像UIButton一個用於UIControlStateNormal和另一個用於UIControlStateDisabled

我想要的效果,其中的UIButton慢慢從一種狀態過渡到另一種

我有什麼都在幹什麼?

BOOL enableDisable = YES; 
[UIView transitionWithView:((UIButton*)object) 
              duration:3.3 
              options:UIViewAnimationOptionTransitionCrossDissolve 
             animations:^{ [((UIButton*)object) setEnabled:enableDisable]; } 
             completion:nil]; 

的問題

的UIButton轉變爲setEnabled=NO狀態在持續時間,但不管我放在optionssetEnabled發生幾乎瞬間。

有什麼我失蹤?

在此先感謝您的時間和回覆。

+0

declare enableDisable as block type object。 –

+0

@johnykumar不知道你的意思。 –

+0

它正在工作,當我運行 –

回答

4

不幸的是,啓用或禁用狀態UIView不是蘋果文檔中動畫屬性的一部分。該動畫的屬性是:

frame, center, bounds, transform, alpha, backgroundColor, contentStretch 

參考這裏:UIView animation

但是,如果你想創建動畫自定義屬性,你可以看看這個帖子描述的方式來實現它。 Create a custom animatable property

+0

'這是工作setEnabled = NO;'這是什麼使我驚喜:( –

+0

我同意阿迪爾,你應該創建你自己的UIControl或者UIView,但是使用組合,不要繼承UIButton。 – Andrea

+0

或者只是製作你自定義的UIButton類,並且創建你自己的自定義動畫:類似'[button setEnabled:YES animated:YES]' –

0

我可以確認,你的代碼工作作爲過渡預計雙方

啓用:NO - > YES

和過渡

啓用:YES - > NO

所以,我的猜測是,在你的應用程序中發生了某種干擾轉換的其他事情。嘗試定義像完成塊:

... 
completion:^(BOOL finished) { 
    NSLog(@"FINISHED? %@", [email protected]"YES":@"NO"); 
} ]; 

transitionWith調用之前或動畫塊中添加跟蹤日誌檢查多長時間的過渡,從開始運行到結束。

我的猜測是,雖然按鈕正在轉換其他事情正在發生改變其狀態,並作爲次要影響打破了過渡。我擔心,如果沒有看到更多的代碼,它將不可能幫助你進一步...

+0

我猜測原因是用戶交互,動畫開始並立即停止,我嘗試了相同的代碼與明確的觸發器,它的工作完美,但當它從手勢觸發d沒有工作 –