Ios 是否在执行期间更新UIImageView中的图像?

Ios 是否在执行期间更新UIImageView中的图像?,ios,uiimageview,Ios,Uiimageview,我有一个界面,在一个视图上包含几个UIImageView组件,我想在运行时更新动画图像 其主要思想是将动画图像更改为延迟2秒的线程。下面的代码工作正常。但是,当我引入睡眠时间时(使用带注释的NSThread sleepForTime);它不再起作用了。我相信有一个合乎逻辑的解释,但我无法确定它 需要注意的是,动画已经与另一组动画图像一起运行。 欢迎提供任何帮助或提示:) 将dispatch\u async替换为dispatch\u后的怎么样,并设置2秒的延迟: dispatch_after(di

我有一个界面,在一个视图上包含几个UIImageView组件,我想在运行时更新动画图像

其主要思想是将动画图像更改为延迟2秒的线程。下面的代码工作正常。但是,当我引入睡眠时间时(使用带注释的NSThread sleepForTime);它不再起作用了。我相信有一个合乎逻辑的解释,但我无法确定它

需要注意的是,动画已经与另一组动画图像一起运行。 欢迎提供任何帮助或提示:)


dispatch\u async
替换为
dispatch\u后的
怎么样,并设置2秒的延迟:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    int randomnReward =  0;
    WizzReward* currentReward = [rewardListForPages objectAtIndex:randomnReward];
    WizzAnimalModel* animalModel = [gameLevelManager getAnimalModelByCategoryId: [currentReward getAnimalId]];

    NSMutableArray* expressionsForAnimals = [animalModel getArrayForClosedEyesFaceExpression];
    float animationDuration = [animalModel getStandardRewardAnimationDuration];
    pageContentViewController.imagesArrayFileLevel1  = expressionsForAnimals;
    pageContentViewController.animationLevel1Duration = animationDuration;
});

可以通过修改图像数组直接更改动画图像,而无需任何计时器

但是,使用计时器更改相同的动画图像需要3个步骤:

  • 首先是图像阵列的修改
  • 第二,UIView AnimationImages与修改后的图像数组的实际重新关联
  • 最后启动UIView,即使它事先没有停止
下面的源代码现在可以使用计时器正常工作:

WizzReward* currentReward = [rewardListForPages objectAtIndex:0];
WizzAnimalModel* animalModel = [gameLevelManager getAnimalModelByCategoryId: [currentReward getAnimalId]];
NSMutableArray* expressionsForAnimals = [animalModel getArrayForClosedEyesFaceExpression];



pageContentViewController.imagesArrayFileLevel1 = expressionsForAnimals;
pageContentViewController.reward1CurrentPage.animationImages = pageContentViewController.imagesArrayFileLevel1;
[pageContentViewController.reward1CurrentPage startAnimating];

我没有在文献中找到“时间与无时间差”的信息,也没有找到这样做的实际原因;但它每次都有效。希望它能帮助遇到相同问题的人。

使用一个重复计时器,然后更改主线程上的图像如何?谢谢。我试过了,也没用…谢谢你的建议。不幸的是,它得到了同样的结果。有趣的是,它在没有任何形式的计时器(NSThread、thread timer等)的情况下都可以正常工作,但一旦引入计时器,动画就不会更新。
WizzReward* currentReward = [rewardListForPages objectAtIndex:0];
WizzAnimalModel* animalModel = [gameLevelManager getAnimalModelByCategoryId: [currentReward getAnimalId]];
NSMutableArray* expressionsForAnimals = [animalModel getArrayForClosedEyesFaceExpression];



pageContentViewController.imagesArrayFileLevel1 = expressionsForAnimals;
pageContentViewController.reward1CurrentPage.animationImages = pageContentViewController.imagesArrayFileLevel1;
[pageContentViewController.reward1CurrentPage startAnimating];