2012-06-10 26 views
0

我在計算這個問題時遇到了很多麻煩。這個方法從另一個類中導入到我的viewController.m中,如果我把代碼複製到同一個文件中的IBAction中,它可以正常工作。而「測試midi」正在記錄它應該是什麼時候。所以IBOutlets和動畫代碼看起來不錯,但由於某種原因,這種方法不會做它應該這個動畫在這個方法中不起作用

- (void) source:(theSource*)data dataReceived:(const dataList *)theList 
    { 

     led.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"led-highlighted.png"],[UIImage imageNamed:@"led-passive.png"],nil]; 
     led.animationDuration = 0.3; 
     led.animationRepeatCount = 20; 
     [led startAnimating]; 
    NSLog(@"test");} 

也,如果我只是把這個交換圖像不起作用。該方法正在被調用,因爲它正在登錄到控制檯。

midiLed.image = [UIImage imageNamed:@ "led-highlighted.png"]; 

回答

0

問題可能在於您如何調用此方法。它應該在主線程上,並且在調用它之後,您的代碼應該返回到運行循環(即您的代碼應該「完成」),然後才能對用戶界面進行更改。

如果這不能幫助您找到它,請分享調用此方法的代碼。

0

什麼線程-source:dataReceived:被調用?如果您使用的是CoreMIDI,則您的MIDI接收功能將在單獨的高優先級線程上被調用。

您不應該觸摸非主線程的UI,因爲UIKit不是線程安全的。

這裏是讓主線程上運行的用戶界面的一種方式:

- (void) source:(theSource*)data dataReceived:(const dataList *)theList 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     led.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"led-highlighted.png"],[UIImage imageNamed:@"led-passive.png"],nil]; 
     led.animationDuration = 0.3; 
     led.animationRepeatCount = 20; 
     [led startAnimating]; 
     NSLog(@"test"); 
    }); 
} 
相關問題