【问题标题】:UIImageView fails to update repeatedlyUIImageView 重复更新失败
【发布时间】:2014-04-04 23:26:10
【问题描述】:

我有一个视图控制器,它在 viewDidAppear 中调用以下内容:

[self updateCameraImage];
[cameraImageView setImage:lastCameraImage];

效果很好。在后台,updateCameraImage 方法向服务器发送一条消息并检索图像数据,然后将该数据转换为 UIImage。然后将 self.lastCameraImage 设置为此 UIImage。第二行将此图像设置为 cameraImageView.image 并且新图像显示在屏幕上。此 UIImageView 已添加到情节提要中,并作为属性添加到标题中。

@property (nonatomic, strong) UIImage *lastCameraImage;
@property (weak, nonatomic) IBOutlet UIImageView *cameraImageView;

我希望它不断更新。问题是,如果我执行以下操作,它实际上不会在视图中显示新图像,直到最后一次调用 setImage。我知道图像正在被检索,所以我不知道为什么它不起作用。

[self updateCameraImage];
[cameraImageView setImage:lastCameraImage];
[self updateCameraImage];
[cameraImageView setImage:lastCameraImage];
[self updateCameraImage];
[cameraImageView setImage:lastCameraImage];

任何帮助都会很棒!谢谢。

【问题讨论】:

  • 使用 NSTimer,据我所知,Apple 已将其设置为在这样编写时不更新视觉效果,例如在循环语句或类似语句中。

标签: ios iphone objective-c uiimageview uiimage


【解决方案1】:

如果您在主线程上运行此代码,并且您的 updateCameraImage 函数是同步的,那么您将阻塞 UI,直到所有代码完成。尝试在后台执行 fetch,然后分派回主线程以更新 UI。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self updateCameraImage];

    dispatch_async(dispatch_get_main_queue(), ^{
        [cameraImageView setImage:lastCameraImage];
    });
});

【讨论】:

  • 谢谢!做到了。我向主队列添加了一些调用来更新 UI 的进度。您是否碰巧知道一个很好的资源来阅读后台队列和与 UI 的交互?这使得跟踪状态变得更加困难。
  • 没有什么特别的想法,但我确信快速的谷歌搜索应该会产生一些有趣的信息。底线是您想在后台执行任何长时间运行的代码,并且 UIKit 代码应该在主线程上运行。祝你好运:)
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 2013-03-13
  • 2016-01-31
  • 2012-07-08
  • 1970-01-01
相关资源
最近更新 更多