[btn setImage:点灯.png forState:UIControlStateNormal];
sleep(1);
[btn setImage:消灯.png forState:UIControlStateNormal];
とかやってもsetImageされない…
普通に一回だけsetImageするとちゃんと画像が表示されるのに…
どうせあとで書き換えられるからと最初のsetImageは省略されてしまうようだ。
で、どうすればいいかというと、
dispatch_semaphore_t on_semaphore;
on_semaphore = dispatch_semaphore_create(0);
[NSThread detachNewThreadSelector: @selector(OnLED:) toTarget: self withObject: btn];
// Wait until the semaphore is signaled 点灯待ち
while (dispatch_semaphore_wait(on_semaphore, DISPATCH_TIME_NOW))
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
sleep(1);
//消灯の処理
:
- (void)OnLED:(UIButton *)btn {
[btn setImage:点灯.png forState:UIControlStateNormal];
dispatch_semaphore_signal(on_semaphore);
}
というように別スレッドでsetImageするといいみたい。
ボタンを点滅させるだけでこの量…
セマフォはなくても動くけど使わなかったらタイミングがバラバラでダメでした…
スレッドを使った処理って難しい。
今まで順番通りに実行してくれるプログラムしか書いたことなかったからなぁ…
セマフォなんて教科書でしか見たことなくて実際に使ったのは初めてでした。
使い方としては間違ってるような気もするけど動いて欲しいように動くからいいや。
ラベル:アプリ製作