UIImageView setImage在委托方法中不起作用?

问题描述 投票:2回答:1

我在opencv委托方法processImage中调用setImage函数时遇到问题。当我在setImage中调用viewDidLoad时,我可以看到图像,但是当我在processImage中进行相同操作时,它不起作用。

这里是什么问题?

- (void)viewDidLoad
{
  [super viewDidLoad];

  // This works !
  [processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]];
}

- (void)processImage:(cv::Mat&)img   {

  // This does not work anymore !
  [processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]]; 
}
objective-c opencv uiimageview uiimage
1个回答
7
投票

当您修改UI时,您必须在主线程中进行操作,很有可能在另一个线程上调用了委托方法(如果正在调用它)。试试这个。

- (void)processImage:(cv::Mat&)img   {
    dispatch_async(dispatch_get_main_queue(), ^{
        [processImageView setImage:[UIImage imageNamed:@"resistor3.jpg"]];
        // I also think you should use the dot syntax, but that's purely a style thing
        // processImageView.image = [UIImage imageNamed:@"resistor3.jpg"];
    });
}

编辑:添加有关使用点语法的建议

© www.soinside.com 2019 - 2024. All rights reserved.