2014-02-23 32 views
1

我在opencv代理方法processImage中調用setImage函數時出現問題。
當我打電話setImageviewDidLoad,我可以看到圖像,但是當我在processImage做同樣的,它不起作用。UIImageView setImage不能在委託方法中工作?

這裏有什麼問題?

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

回答

6

當你修改你必須從主線程做它的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"]; 
    }); 
} 

編輯:加入推薦關於使用點語法

+1

我覺得應該是「dispatch_async」,而不是「dispatch_sync」,以避免主UI堵塞。 –

+1

此代碼在後臺線程上運行,所以後臺線程被阻塞的不是主線程 –

+0

這個代碼主要用於什麼,,,, –