2013年12月20日

UIButtonにsetImageできない

iPhoneアプリでボタンのガイドをするためにUIButtonを光ってるように見せようと

[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するといいみたい。
ボタンを点滅させるだけでこの量…
セマフォはなくても動くけど使わなかったらタイミングがバラバラでダメでした…
スレッドを使った処理って難しい。
今まで順番通りに実行してくれるプログラムしか書いたことなかったからなぁ…

セマフォなんて教科書でしか見たことなくて実際に使ったのは初めてでした。
使い方としては間違ってるような気もするけど動いて欲しいように動くからいいや。
ラベル:アプリ製作
posted by one-hand-engineer at 10:34| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック