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"];
4

2 回答 2

0

问题可能在于您如何调用此方法。它应该在主线程上,并且在调用它之后,您的代码应该返回到运行循环(即您的代码应该“完成”),然后对用户界面的更改才会生效。

如果这不能帮助您找到它,请分享调用此方法的代码。

于 2012-06-10T23:32:07.620 回答
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");
    });
}
于 2012-06-10T23:32:28.950 回答