だから私は最初のiOSアプリケーションを開発していますが、助けが必要です。
今の簡単なプログラムでは、約9個のボタンがあり、最初のボタンまたは任意のボタンを押すと、最初のボタンを60ミリ秒間ハイライト、ハイライト解除、2番目のボタンをハイライト、60ミリ秒待機、ハイライト解除などを行います。残りのボタンは、動くLEDのように見えます。
私はスリープ/ usleepを試したように見えましたが、そのスリープ期間が完了すると、ハイライト/ハイライトをすべて一緒にスキップするようです。
例えば:
- (void) button_circleBusy:(id)sender{
firstButton.enabled = NO;
sleep(1);
firstButton.enabled = YES;
残りのボタンについても同様です。遅延はしますが、「firstButton.enabled = NO;」は遅延しません。各ボタンの「無効状態」の写真がありますが、表示されません。
助けていただければ幸いです! NSTimerを調べましたが、どのように実装するのかわかりませんでした。
ありがとう。
-ポール
sleep
は、メインスレッドがシステムに戻った後にのみ表示を更新できるため機能しません。 NSTimerがその方法です。これを行うには、ボタンを変更するためにタイマーによって呼び出されるメソッドを実装する必要があります。例:
- (void)button_circleBusy:(id)sender {
firstButton.enabled = NO;
// 60 milliseconds is .06 seconds
[NSTimer scheduledTimerWithTimeInterval:.06 target:self selector:@selector(goToSecondButton:) userInfo:nil repeats:NO];
}
- (void)goToSecondButton:(id)sender {
firstButton.enabled = YES;
secondButton.enabled = NO;
[NSTimer scheduledTimerWithTimeInterval:.06 target:self selector:@selector(goToThirdButton:) userInfo:nil repeats:NO];
}
...
int64_t delayInSeconds = 0.6;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
do something to the button(s)
});
コードが少ないほど良いコードです。
[NSThread sleepForTimeInterval:0.06];
スイフト:
Thread.sleep(forTimeInterval: 0.06)
NS
したがって、前の例を続けるとこれは
[self performSelector:@selector(goToSecondButton) withObject:nil afterDelay:.06];
詳細 ドキュメント内の情報
試してみる
NSDate *future = [NSDate dateWithTimeIntervalSinceNow: 0.06 ];
[NSThread sleepUntilDate:future];
Avner Barrの回答を少し加えたいと思います。 int64を使用する場合、1.0の値を超えると、関数の遅延が異なるように見えます。したがって、この時点でNSTimeIntervalを使用する必要があると思います。
したがって、最終的なコードは次のとおりです。
NSTimeInterval delayInSeconds = 0.05; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ //do your tasks here });
[NSTimer scheduledTimerWithTimeInterval:.06 target:self selector:@selector(goToSecondButton:) userInfo:nil repeats:NO];
使用するのに最適なものです。使用してsleep(15);ユーザーは他のアクションを実行できなくなります。次の関数を使用すると、goToSecondButtonを適切なセレクターまたはコマンドに置き換えることができます。これらのセレクターまたはコマンドは、フレームワークからも取得できます。