2011-08-18 78 views
0

我正在使用具有旋轉體動畫的iOS應用程序。一系列UIImage存儲在一個NSArray中,一個變量跟蹤當前圖像的索引。屏幕上未顯示UIImage的重複更新

下面的方法將更新的UIImageView

- (void)renewImage{ 
    [rotatingBody.image release]; 
    rotatingBody.image = [[UIImage alloc] initWithContentsOfFile:[currentPerson.imageArray objectAtIndex:pictureIndex]]; 
} 

到現在爲止,我已經被稱爲觸摸事件的響應方法。從觸摸事件中,我計算一個新的pictureIndex,然後調用[self renewImage]。它完美的作品。

但是,現在我想給動畫添加動力。我不是馬上計算下一張圖片,而是計算速度。我打算在一個單獨的線程中使用velocity變量來更新pictureIndex,並降低速度並最終調用[self renewImage]。

輸入問題

每當我連續撥打[自renewImage],曾多次在相同的功能(例如,在一個循環或兩次即可通過某種睡眠分隔)屏幕將不會更新,直到在最後一次通話之後。就好像設備(或編譯器)合理化了第一次更新,即使我確定已經訪問過renewImage方法(由於跟蹤)。

下面是一些測試代碼不起作用:

while (velocity > 0) { 
     pictureIndex++; 
     pictureIndex = pictureIndex % [self getNumberOfImages]; 
     if (pictureIndex < 0) 
     { 
      pictureIndex += [self getNumberOfImages]; 
     } 
     velocity -= 20; 
     NSLog(@"velocity: %f", velocity); 
     [self renewImage]; 
     [NSThread sleepForTimeInterval:0.5]; 
    } 

無論是做這個的:

pictureIndex += 20; 
[self renewImage]; 
sleep(1); 
pictureIndex += 20; 
[self renewImage]; 

有什麼想法?

回答

1

使用一個NSTimer回調改變形象,這一切方式發生在運行循環,而不是一個單獨的線程。

如果一個NSTimer不足以滿足您的需求,您需要調用你的主線程的方法來改變形象上的其他線程UI變化不會立即更新。

+0

它工作。謝謝!關心快速解釋爲什麼? (並且,是的,我知道我需要知道的應該在文檔中) – Jonatan

+1

就我所知,對UI的所有更改都需要在主線程/運行循環中執行。 –