2011-04-13 16 views
0


我有一個問題:
我設計的GUI沒有InterfaceBuilder中,
現在我想改變一個按鈕的圖像的時間很短, 但它不會改變,直到整個for循環結束。 我在做什麼錯?UIButton的圖像沒有變化的「for」循環

for (size_t i=0; i< 100; ++i){ 
     switch (variable) { 
     case 0: 
      [self changeRedButtonToWhite: redButton]; 
     break; 
     case 1: 
     .... 
     } 
    } 

-(IBAction) changeRedButtonToWhite: (id)sender{ 
    [sender setBackgroundImage: whiteImage forState: UIControlStateNormal]; 
} 
+0

你在哪裏設置'variable'? – benwong 2011-04-13 11:21:07

+0

變量的起始值是什麼?另外,for循環和switch/case語句的原因是什麼? – Sabobin 2011-04-13 11:22:23

+0

變量不重要。當變量爲0時,沒有任何反應。這纔是重點 ?!? – NewYearsEve 2011-04-13 11:25:13

回答

2

你不能使用for循環來做到這一點,你應該嘗試使用NSTimer來代替。在主線程內部發生循環時,UI不會刷新。

+0

但我該怎麼做?我有四種顏色,我希望它們隨機閃光,即可變。所以我認爲我能做到的唯一方法就是使用for-loop – NewYearsEve 2011-04-13 14:01:45

+0

讓一個帶有非常短timelapse的'NSTimer'調用一種隨機更改顏色按鈕的方法。 – scalbatty 2011-04-14 07:51:22

+0

非常感謝!它工作得很好! – NewYearsEve 2011-04-17 08:20:20

-1

你不能做到以下幾點嗎?

將所有按鈕添加到NSMutableArray,或者只是在使用NSArray時,如果您沒有計劃在分配按鈕後添加更多按鈕。

NSMutableArray *buttonsArray = [[NSMutableArray alloc] initWithObjects:button1, button2, button3, nil]; //and so on.... 

,然後....

for(UIButton *button in buttonsArray){ 
    [button setBackgroundImage: whiteImage forState: UIControlStateNormal]; 
} 
0

放在後臺線程for循環和調用主線程上-changeRedButtonToWhite。

1

@ Luzal的解釋是正確的。您正在設置按鈕的背景顏色,但這隻會導致按鈕被標記爲需要重繪。重繪不會發生(至少),直到執行返回到運行循環,並且直到for循環結束纔會發生。

我們無法從您發佈的代碼中知道您在做什麼循環,但是如果您使用它作爲延遲機制,然後將按鈕顏色更改回紅色,例如variable擊中99,反正這不是一個好計劃。您可以使用NSTimer來管理顏色更改的持續時間,或者使用-performSelector:afterDelay :,或者使用Core Animation。