2012-09-12 46 views
1

我有一點的代碼是這樣的:爲什麼在動畫塊外設置的一些動畫屬性不起作用?

//up till now someButton's alpha was 1 
someButton.alpha = 0; 
[UIView animateWithDuration:.25 
         delay:0.0 
        options:kMaskEaseOut 
       animations:^ { 
        someButton.alpha = 1; 
       } 
       completion:^ (BOOL finished){}]; 

問題是動畫開始之前someButton的阿爾法沒有設置爲0,即沒有發生視覺。現在,如果我註釋掉整個動畫塊它的確會someButton的alpha設置爲0。另外,如果我這樣做:

[UIView animateWithDuration:0 
         delay:0.0 
        options:kMaskEaseOut 
       animations:^ { 
        someButton.alpha = 0; 
       } completion:^ (BOOL finished){ 
        [UIView animateWithDuration:.25 
              delay:0.0 
             options:kMaskEaseOut 
             animations:^ { 
              someButton.alpha = 1; 
             } 
             completion:^ (BOOL finished){}]; 
       }]; 

它工作正常(我開始一個0長度的動畫動畫後),這有點傻。

+0

Alpha值是浮動的,例如, '1.0f'或'0.0f' – TimD

+0

@TimD,編譯器足夠智能,可將'int's轉換爲'float'。 – Ravi

回答

0

嗯,可能是因爲將alpha設置爲零所需的時間太短以至於看不到它(它只是一行代碼 - 暫時發生 - 並且執行速度與其他任何代碼行一樣快),但從現在開始,需要0.25秒才能將alpha更改爲1.這可能是您沒有看到Alpha設置爲0的動畫的原因,但可以看到它回到1.同樣的解釋很好爲你的第二個代碼示例。

+0

你所描述的是我想要發生的事情,「將alpha設置爲零所需的時間太短以至於看不到」,這種情況沒有發生。我不希望它動畫到0我希望它是0 _immedately_。 – Shizam

+0

「someButton.alpha」在第一個代碼示例的第一行中設置爲0之前的值是多少? – Ravi

0

檢查this,特別是部分Animations(他們有一個類似的例子比你的:hideShowView)。在你的兩個代碼中這種行爲差異的原因是動畫出現在另一個線程發生立即

//up till now someButton's alpha was 1 
someButton.alpha = 0; 
[UIView animateWithDuration:.25 
          delay:0.0 
         options:kMaskEaseOut 
        animations:^ { 
         someButton.alpha = 1; 
        } 
        completion:^ (BOOL finished){}]; 
NSLog(@"%d", someButton.alpha); // will display 1 not 0 

我想你可以稍微耽誤你的動畫,如果你不想註釋掉動畫(與你的第二個代碼源0延遲動畫)。

+0

我實際上有一個類似的想法,但它不工作不幸:p – Shizam

+0

uhm所以你沒有看到你的按鈕alpha設置爲0,或者你沒有看到動畫,這是假設將你的alpha從0改爲1?我不認爲使用兩個動畫會出現任何錯誤,因爲您的第一個動畫將立即發生。 – tiguero

+0

它並不是說第二個例子(兩個動畫)有什麼內在的錯誤,它看起來像一個不必要的黑客,因爲它不應該像那樣。 – Shizam

相關問題