2011-07-27 76 views
0

我有一個問題,根據我的應用程序的性能。iPhone畫出框架問題

一些背景第一: 我開發順利運行在我的MacBook iPhone應用程序,但我的iPhone 4開發設備上有點laggy。所以我開始尋找原因並發現它很快。 應用程序是一個使用由計時器觸發的drawRect方法的遊戲。

問題: 在這個drawRect中,我使用drawInRect:方法從UIImage中繪製背景。由於我想讓背景移動,因此我有一個比iPhone顯示更寬的圖像,並且我通過定時器觸發的小步驟將其繪製到-400像素,然後將其重置爲0像素以在我的「移動效果」中獲得遊戲。 這似乎使我的應用程序滯後。當我將它繪製在iPhone的框架中時,我沒有任何問題,所以我非常確定這是問題所在。

有沒有解決方案?更好的技術人員等? 我不想使用多個圖像的動畫來爲背景設置動畫。

此致

回答

0

你如何移動在屏幕上這一形象?你是否每隔1/30秒觸發一次移動,因爲如果你不這樣做,可能是造成「laggy」效果的原因。我建議設置一個新的NSRunLoop,讓這個動作成爲其中的一部分,並且每1/30秒運行一次循環觸發器,這樣你就可以獲得30 FPS的幀率,看起來很平滑。

此外,發佈您正在使用的代碼,也許我們可以發現問題。

+0

這就是我所做的。我有一個CGPoint來保存我繪製的圖像的原點。我每隔1/30秒就會拒絕它,直到達到-400像素,然後我將它重置爲0像素。每當我更新CGPoint時,我畫一個CGRect,並將其傳遞給drawRect方法。 滯後僅在繪製界限之外時出現。比方說,如果我通過小步驟降低到100像素(正),並重置爲200像素,我沒有得到任何性能問題。 – Nicke

+0

編輯:它可能也必須與繪製的圖像的大小。現在是960乘320像素。有沒有大.png文件的技術,或者我應該comprimize它? – Nicke

0

我只是重新考慮這個問題,我想到了一個解決方案。不是每隔1/30秒重新繪製一次,爲什麼不畫一次並重新定義圖像所在的框架。創建一個方法來完成此操作,然後設置一個新的nstimer,它每調用一次這個新方法/ 30秒。這樣

-(void) movePicture { 
    position += 5; 
    if (position <= 0) { 
     [moveTimer invalidate]; 
    } 
    picture.frame = CGRectMake(position,10,10,10); 
    [self.view setNeedsDisplay]; 
} 

東西要麼就是它,你可以只使用一個動畫,並將其設置爲你想要的任何時間跑量。這將最終異步發生,所以如果有的話,您不必擔心它落後於應用程序。