2010-04-12 150 views
0

我有這個大問題,我不知道如何解決。我有一個UIView,我想繪製一個滾動背景。我使用NSTimer每秒更新30幀,但似乎每8秒重新繪製一幀。我正在調用[self setNeedsDisplay],但它沒有效果。我不知道爲什麼會發生這種情況,有沒有人有任何提示?UIView繪圖問題

謝謝你的時間。

我有一個NSTimer在我的applicationDidFinishLaunching方法

 
timer = [NSTimer scheduledTimerWithTimeInterval:0.0 
     target:self 
     selector:@selector(gameLoop:) 
     userInfo:nil 
     repeats:YES]; 

IT的消息傳遞這個方法:

 
-(void) gameLoop: (id) sender 
{ 
    [myView updateAll]; 
    [myView setNeedsDisplay]; 
} 

MyView的是一個UIView。 UpdateAll更新我的繪圖代碼。它工作正常,問題似乎是drawRect方法很少執行。我需要知道如何讓它每秒執行30幀。我不斷看到人們說,你所要做的就是我上面所說的,但setNeedsDisplay每8秒鐘只能被調用一次。

感謝您的幫助...

+0

發佈相關代碼。 – 2010-04-12 19:43:31

回答

0

事實證明,我的代碼只是非常低效,導致速度慢而不是計時器。如果您遇到類似問題,請確保在假定它未執行之前,使用一些簡單的繪圖(例如,將「每秒幀數」繪製到屏幕上)測試drawRect。感謝您的觀看。

0

請勿使用NSTimer。

NS Timer reference

因爲一個典型的運行循環管理的各種輸入源,用於定時器的時間間隔的有效分辨率被限制爲50-100毫秒的數量級上。

我不是iPhone的專家,但您可能需要在平臺上查看動畫以實現您想要的更新間隔。

1

重新繪製視圖是一個昂貴的操作,這會大大降低性能。如果可以,可以使用[UIView beginAnimation...或使用CAAnimation s將背景作爲圖像視圖在背景中移動。

+0

問題是我必須這樣做。它不適用於最終應用程序,它與其他技術的性能比較。 – toc777 2010-04-14 09:30:13

+0

好吧,我認爲你的比較完成了,那麼,不是嗎? 「可怕的表現」似乎是一個足夠的比較大多數;) – 2010-04-14 17:20:11

+0

我知道我不需要它更新30 fps的性能比較,但我想要得到它的工作無論如何(只爲表演),因爲這是它是如何正在運行其他技術。 – toc777 2010-04-15 17:14:49