我很难解决这个问题。此方法从另一个类导入到我的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)
问题可能在于您如何调用此方法。它应该在主线程上,在调用它之后,你的代码应该返回到运行循环(即你的代码应该“完成”),然后才能对用户界面进行更改。
如果这对您没有帮助,请分享调用此方法的代码。
答案 1 :(得分:0)
调用-source:dataReceived:
的线程是什么?如果你正在使用CoreMIDI,你的MIDI接收函数将在一个单独的高优先级线程上被调用。
您不应该从非主线程触摸UI,因为UIKit不是线程安全的。
以下是在主线程上运行UI的一种方法:
- (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");
});
}