0

私はこれを理解するのに非常に苦労しています。このメソッドは、別のクラスから viewController.m にインポートされます。コードを同じファイルの IBAction にコピーすると、正常に機能します。そして、「テストミディ」は、想定されているときにログを記録しています。したがって、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

どのスレッド-source:dataReceived:で呼び出されていますか? CoreMIDI を使用している場合、MIDI 受信関数は別の優先度の高いスレッドで呼び出されます。

UIKit はスレッド セーフではないため、非メイン スレッドから UI に触れないでください。

メイン スレッドで UI を実行する方法の 1 つを次に示します。

- (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 に答える