我有一個例程,使用CoreGraphics和drawRect繪製一個大齒輪。我經歷的階段中使用的按鈕,前進齒輪:強制setNeedsDisplay
- (IBAction爲)advanceButtonPressed:(ID)發送方{
stage=stage+1;
if (stage==4) stage=0;
[self setNeedsDisplay];
}
繪製齒輪該例程在的drawRect,和齒輪的齒根據階段的值被拉到一個新的位置,並傳遞給drawRect。在四個步驟中,每按一次按鈕,齒輪就轉到它的新位置(圍繞圓的一段)。
我改變了buttonPressed例程,讓它在一個循環中完成四個階段,所以我只需要按下按鈕一次,但它不工作:
- (IBAction爲)buttonPressed:(ID)發送{
for (stage=0;stage<4;stage++){
NSLog(@"%i",stage);
[self setNeedsDisplay];
}
}
我的NSLog顯示這一階段經歷了四個值,只是就像在早先的例程中那樣。但是setNeedsDisplay只執行一次,(因爲drawRect中的NSLog曲線確認了),所以齒輪顯示在其最終位置,而不是中間階段。它看起來像setNeedsDisplay只在按鈕例程完成時執行,儘管它在循環內部。
有沒有辦法強制它執行?
屏幕刷新率無關緊要;它直到方法返回之後才真正顯示的原因是因爲這就是Cocoa和Cocoa Touch中的繪圖工作。循環需要多長時間無關緊要;即使你花了整整一分鐘,直到你的代碼返回到運行循環的控制,仍然不會發生繪圖。 http://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40009503-CH2-SW10 –
定時器運行良好。感謝您的建議 –