2013-06-18 58 views
0

我創建了一個程序,發現一個錯誤,我似乎無法解決。NSTIMER似乎被忽略

我已經解決了這個問題,重新創建一個全新的項目,但它仍然發生。

問題是,當我按下按鈕圖像改變,但速度比在NSTIMER中設置的速度快得多,但只有第一次按下按鈕。

如果我繼續按下按鈕,圖像以我需要的速度變化。

只發生在第一次圓,我使用的是觸及事件(儘管我試圖觸摸起來INSIDE)

這只是發生在第一時間,是非常重要的是,第一次是一樣的與其他時間一樣。

我知道各種討論爲的NSTimer的準確性反正,但我不認爲這是有關我的問題

,這裏是我的.h

- (IBAction)slap:(id)sender { 
    NSString *imagechange4 = [NSString stringWithFormat:@"onehandedplayer2.png"]; 
    //player2 is an UIButton IBOutlet 
    [player2 setImage:[UIImage imageNamed:imagechange4]]; 

    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(handsback1) userInfo:nil repeats:NO]; 
} 

-(void)handsback1 { 
    NSString *imagechange3= [NSString stringWithFormat:@"hands rotated.png"]; 
    [player2 setImage:[UIImage imageNamed:imagechange3]]; 
} 
+0

望着這一次 - 從靜態字符串,你爲什麼要創建的字符串傳遞給'imageNamed:'方法?直接傳遞字符串有什麼問題? – Abizern

+0

我認爲它與待加載到內存中的圖像滯後有關。在第一次執行這行時[UIImage imageNamed:someImage]; someImage顯示延遲加載到內存中。下一次啓動someImage時,緩存的圖像將被加載。通過給予預期的表現 – IronMan

+0

@IronMan這不是我問的。我在說他應該寫作:'[player2 setImage:[UIImage imageNamed:@「onehandedplayer2.png」]];'首先。 – Abizern

回答

0

嘗試使用performSelector -

[self performSelector:@selector(handsback1) withObject:nil afterDelay:0.5]; 

這真的很容易&可靠。

+0

嗯。老套。我本來是用'dispatch_after'親自去的,並且使用了一個塊,所以不需要編寫回調函數。 – Abizern

+0

好主意 - 只是嘗試過,但它又不工作。第一次它以比其他時間更快的速度改變圖像,但是當我再次按下按鈕時,它會轉到正確的時間,等等......非常奇怪 –

+0

實際上,SLAP似乎有延遲按下按鈕,發送超時,然後衝過整個過程的其餘部分。 –

0

剛剛空閒了幾分鐘(!)&又遇到了這種情況 - 我想你可能會誤認爲在圖像更改時按下突出顯示的按鈕 - 是否取消選中按鈕的「突出顯示的調整圖像」屬性在IB的屬性檢查器中?

或許不太可能,但你永遠不知道...