2010-10-28 20 views
1

我正在爲iPad設計項目,我試圖通過切換預先呈現的圖像來模擬帶觸摸的3D身體的旋轉。優化在iPad上加載許多圖像

對於內存管理,我並不是最敏銳的人,所以我想知道是否有人有關於如何優化的提示。

我的解決方案,現在看起來是這樣的:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
UITouch *myTouch = [[event allTouches] anyObject]; 
CGPoint location = [myTouch locationInView:self.view]; 
int pictureIndex; 
//Rough mapping of image to point on screen 
if (location.x <= 384) { 
    pictureIndex = (384 - location.x)/(768/rotatingPictures)+1; 
} 
else { 
    pictureIndex = rotatingPictures - (location.x-384)/(768/rotatingPictures)+1; 
} 
[theImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.png", pictureIndex]]]; 

}

其高效加載圖像這樣?將圖像首先加載到數組還是更好?

我寧願一次加載所有加載時間,而不是在旋轉時加載。

+0

是的,就像一個魅力。感謝大家的幫助。 – Jonatan 2010-11-11 13:56:31

+0

對不起,我對這個網站的禮節沒有見識。我試圖現在投票,但得到一個消息,說我缺乏投票的聲望。如果你希望我做別的事情,請告訴我。 – Jonatan 2011-01-30 07:25:25

回答

8

第一個關鍵信息是imageNamed是無望的!這是衆所周知的狗。它既不是一個也不是另一個;它不能很好地緩存,並且它傾向於建立太多的內存使用。 (谷歌上漲了100多篇關於此的文章。)所以,那就是

您必須告訴我們您有多少圖片,以及每張圖片的大小(KB或MB)。

只有這樣才能決定一個成功的策略。

要從一個大的圖像交換到另一個「正常」,如果你是在交換大量圖像和過去,如果你不用擔心內存,你這樣做..

[hugeImage.image release]; 
hugeImage.image = [[UIImage alloc] initWithContentsOfFile: 
      [[NSBundle mainBundle] 
      pathForResource:@"bodyPart" 
      ofType:@"png"]]; 

這將正確擺脫以前的形象,並引入下一個。從來沒有,一直使用imageNamed - 它只專門爲小型(即圖標大小)的界面使用(即按鈕,圖標等)圖像設計。

但是,在我們知道圖像的精確數量和精確的大小之前,沒有人能夠爲您提供幫助,事實上,您期望圖像被交換的每秒或每分鐘的頻率。希望能幫助到你!

-----您接着說......

「89張巴紐圖片約70 K至100多K大小不等的」

好消息,你將有沒有任何問題。您可以輕鬆加載這些動畫,並且您甚至可以實時快速地製作20 - 30 fps的動畫。

只要按照上面的說法做,每次你從一個換到另一個,就完成了。 (記錄中,請記住在初始化時首先加載一個,以便上面的代碼片段可以正確使用它的「第一次」使用,如果可能的話,釋放最後一個,重做。)乾杯。

+0

89.png大小從70K到100K不等的圖片。我會馬上嘗試initWithContentsOfFile – Jonatan 2010-10-29 13:07:42