此动画在此方法中无法正常运行

时间:2012-06-10 23:24:05

标签: objective-c ios

我很难解决这个问题。此方法从另一个类导入到我的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"];

2 个答案:

答案 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");
    });
}