2012-04-26 19 views
0

我正在研究一個非常簡單的iPhone遊戲,它涉及到基於隨機語音提示,連續多次選擇正確的彩色按鈕。我已經設置好了,所以如果按鈕是一種顏色並且被點擊,那麼它每次都會變成硬編碼的顏色(例如,如果你點擊紅色,它總是變成藍色)。顏色改變方法在IBOutlet中設置。我在一個while循環中設置了一個計時器,當計時器結束時,它檢查玩家是否做出了正確的選擇。問題是隻有在計時器用完之後,按鈕顏色纔會發生變化,這會導致用於檢查正確答案的方法出現問題。有沒有辦法讓這種顏色變化立即發生?從我搜索的內容來看,我知道它與故事板動作有關,直到代碼執行後纔出現,但我沒有發現使用定時器的任何內容。這裏是調用計時器如果答案是正確的方法的一部分:objective-c:計時器結束前的動畫按鈕

BOOL rightChoice = true; 
int colorNum; 
NSDate *startTime; 
NSTimeInterval elapsed; 
colorNum = [self randomizeNum:middle]; 
[self setTextLabel:colorNum]; 
while (rightChoice){ 
    elapsed = 0.0; 
    startTime = [NSDate date]; 
    while (elapsed < 2.0){ 
     elapsed = [startTime timeIntervalSinceNow] * -1.0; 
     NSLog(@"elapsed time%f", elapsed); 
    } 
    rightChoice = [self correctChoice:middleStatus :colorNum]; 
    colorNum = [self randomizeNum:middle]; 
} 
+0

不是Xcode的問題。 – Almo 2012-04-26 13:35:06

回答

2

兩種情況之一脫穎而出

  • 您使用while循環作爲一個定時器,不做到這一點 - 操作是同步的。
  • 如果這是在主線程上運行,並且您的代碼不返回,您的UI將更新。口頭禪說:'當你不回來時,你會阻止。'
  • 可可有NSTimer異步運行 - 這是理想的。

因此,讓我們get to grips with NSTimer(或者您可以使用GCD並將隊列保存到伊維爾,但NSTimer似乎是正確的方式)。

讓伊娃稱爲timer_:

// Top of the .m file or in the .h 
@interface ViewController() { 
    NSTimer *timer_; 
} 
@end 

使一些啓動和停止功能。你如何稱呼這些取決於你。

- (void)startTimer { 
    // If there's an existing timer, let's cancel it 
    if (timer_) 
    [timer_ invalidate]; 

    // Start the timer 
    timer_ = [NSTimer scheduledTimerWithTimeInterval:5.0 
              target:self 
              selector:@selector(onTimerFinish:) 
              userInfo:nil 
              repeats:NO]; 
} 

- (void)onTimerFinish:(id)sender { 
    NSLog(@"Timer finished!"); 

    // Clean up the timer 
    [timer_ invalidate]; 
    timer_ = nil; 
} 

- (void)stopTimer { 
    if (!timer_) 
    return; 

    // Clean up the timer 
    [timer_ invalidate]; 
    timer_ = nil; 
} 

現在

  • 把你的計時器測試代碼在onTimerFinish功能。
  • 製作存儲當前選擇的伊娃。在做出選擇時更新此ivar並對UI進行相關更改。如果停止條件滿足,調用stopTimer。
  • 在onTimerFinished中,如果需要,可以有條件地調用startTimer並再次啓動。

希望這有助於!

+1

哇,完美的工作!非常感謝!我有一個帳戶,我經常在工作中使用,但密碼在那裏,所以我沒有足夠的代表給予upvote。否則,你絕對值得一個! – erasmuss22 2012-04-26 15:22:19

+0

快樂幫助 - 祝你好運! – 2012-04-26 15:27:26