我正在使用具有旋轉體動畫的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];
有什麼想法?
它工作。謝謝!關心快速解釋爲什麼? (並且,是的,我知道我需要知道的應該在文檔中) – Jonatan
就我所知,對UI的所有更改都需要在主線程/運行循環中執行。 –