我動畫的圖像,並不知道下一個圖像提前。我希望GUI通過這個保持響應。iOS動畫:不阻止GUI,同時動畫未預知的動畫
在每個動畫步驟(〜800ms)中,我嘗試通過block
計算所需圖像,然後通過uiBlock
更新UI。
使用GCD,在每個動畫一步我運行下面的函數block
作爲我長期的任務和uiBlock
包含代碼刷新GUI:
-(void)runBlock:(dispatch_block_t)block withUIblock:(dispatch_block_t)uiBlock onThread:(NSString *)thread{
if ([thread isEqualToString:@"main"]) {
[block invoke];
[uiBlock invoke];
} else if ([thread isEqualToString:@"background"]){
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
[block invoke];
dispatch_sync(dispatch_get_main_queue(), ^{
[uiBlock invoke];
});
});
}
}
這個代碼塊需要這樣運行:
for (i=0; i<iterations; i++){
[block invoke];
[uiBlock invoke]; // because we want to see the result after each iteration
}
我用sync
,而不是async
正是因爲每個block
具有先下一動畫步驟block
可以運行運行;秒block
需要第一個block
。
我在網上看到的大多數教程似乎都顯示了明顯的並行任務,例如從URL中提取數據。我想知道如何在使用dispatch_sync
時讓我的UI響應(因爲這似乎是一個需求)。
我更新了我的問題;我需要這個迭代運行。您的解決方案在某種意義上起作用它以隨機順序運行「[uiBlock invoke]」。它需要在每個[block invoke]之後更新。 – Scott
好的。您是否一次運行此動畫,或者您多次循環播放動畫。 – santhu
而且,假設你提出了firstImage的請求,那麼你等待.8secs,現在你會請求第二張圖片嗎?如果firstImage沒有以.8secs下載,但在3secs後下載,但以2secs下載第二張圖片,您仍然會顯示第一張圖片,還是繼續從secongImage中繼續? – santhu