2010-10-13 85 views
1

我遇到了麻煩,我想知道是否有人可以幫忙?圖像未出現在detachNewThreadSelector

當用戶在我的測驗遊戲中點擊答案時,我在屏幕上加載了一個覆蓋圖像,該圖像是勾號或十字形以指示答案是否正確。圖像正在加載到新線程中。

問題是圖像不會在用戶每次點擊答案時出現,它只會在一輪中出現大約20%的時間。

更令人感到奇怪的是,雖然我在幾個月前已經準備好了iOS3遊戲,並且這個問題沒有發生,但它似乎只是在更新到iOS4時纔開始。

下面是代碼:

tick = [UIImageView alloc]; 
[tick initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)]; 
[tick setImage:[UIImage imageNamed:@"correct.png"]]; 

cross = [UIImageView alloc]; 
[cross initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)]; 
[cross setImage:[UIImage imageNamed:@"wrong.png"]]; 

的線程在這裏稱爲:

的圖像在的loadView方法創建

-(void)answerAttempt:(UIButton *)b{ 
    ansQues++; 
    if([b.currentTitle isEqualToString:ans]){ 
     [NSThread detachNewThreadSelector: @selector(showTick) toTarget:self withObject:nil]; 
     [appDelegate playSound:1]; 
     score++; 
       ... 
       ... 
       ... 
}else{ 
    [NSThread detachNewThreadSelector: @selector(showCross) toTarget:self withObject:nil]; 
    [appDelegate playSound:0]; 
} 

這裏是兩個線程調用的函數:

-(void)showTick{ 
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
[tick setHidden:NO]; 
[levelPage addSubview:tick]; 
[levelPage bringSubviewToFront: tick]; 

usleep(500000); 

[tick removeFromSuperview]; 
[pool release]; 
} 

-(void)showCross{ 
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
[cross setHidden:NO]; 
[levelPage addSubview:cross]; 
[levelPage bringSubviewToFront: cross]; 

usleep(500000); 

[cross removeFromSuperview]; 
[pool release]; 
} 

正如你可以從代碼中看出的那樣,我嘗試了各種方法來試圖讓它每次都顯示出來,但是現在還沒有找到任何解決方案。我已經檢查過以確保每次都調用正確的線程,而且它的確如此 - 只是UIImage用於勾號和交叉不顯示。

請隨時提出任何進一步的問題。

謝謝。

回答

4

所有UI更新都應在主線程上完成。另外,如果你在你的代碼睡覺,設計可能是不正確的,但如果你是停留在做這種方式,那麼一個簡單的解決方法是這樣:

[levelPage performSelectorOnMainThread:@selector(addSubview:) withObject:cross waitUntilFinished:NO]; 
+0

+1對我來說很好 – 2010-10-13 15:21:27

+0

感謝您的幫助和建議隊友,但即時通訊嘗試在我的showTick方法中使用該行代碼,就在睡眠之前,我得到一個錯誤消息:'UIImageView'可能不會響應'-performSelectorOnMainThread:withObject:waitUntilFinished:'任何想法解決這個問題? – user474582 2010-10-14 12:54:31

+0

我從內存中寫道。你有沒有看過文檔?他們是一個很好的資源。我可能在某處出現錯字。 – coneybeare 2010-10-14 14:37:48