ios - UIImageView 重复更新失败

标签 ios iphone objective-c uiimageview uiimage

我有一个 View Controller ,它在 viewDidAppear 中调用以下内容:

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

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

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

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

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

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

最佳答案

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

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

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

关于ios - UIImageView 重复更新失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22874646/

相关文章:

ios - 如何在Objective C中获取路由器IP地址?

iphone - 将 UIView 添加到另一个 UIView 时 y 位置不正确

iphone - 应用程序在 super dealloc 方法中崩溃

iphone - 加载方法后的 iOS ViewController

iphone - NSURL请求问题

ios - Estimote iBeacons 未检测到

objective-c - 如何安全地将此 double 转换为 int?

ios - 如何在单元格 subview 中找到按钮

ios - UIScrollView 取消 UIPageViewController 滚动时的手势

objective-c - ObjC : How to proper implement a class that release itself?