UIImageView setImage无法在委托方法中工作?

时间:2014-02-23 22:11:20

标签: objective-c opencv uiimageview uiimage

我在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"]]; 
}

1 个答案:

答案 0 :(得分:7)

当您修改UI时,您必须从主线程执行此操作,可能是委托方法(如果正在调用)在另一个线程上调用。试试这个。

- (void)processImage:(cv::Mat&)img   {
    dispatch_sync(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"];
    });
}

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