-1

私はwhileループを作っていて、それを遅らせようとしています。

while (mode == 1)
{
    [self performSelector:@selector(on) withObject:nil afterDelay:slider.value];
    NSLog(@"on");
    [self performSelector:@selector(off) withObject:nil afterDelay:slider.value];
    NSLog(@"off");
}

しかし、スライダーを 10 秒に設定しているにもかかわらず、オンとオフが非常に高速です。

また、アプリの黒い画面が表示され、ステータスバーと nslog しか表示されませんが、それは何か他のことが関係している可能性があります。

4

7 に答える 7

2

これがアプリに伝えていることです。 「今から数秒後に何かをオンにしてください」「今
から数秒後に 何かをオフにしてください」 これに問題はありますか?slider.value
slider.value

于 2013-08-08T11:10:17.750 に答える
0
double delayInSeconds = slider.value;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self off];
    //or
    [self on];
});

これは、指定された時間後にブロック内で何でも実行します! :)

于 2013-08-08T11:09:39.870 に答える
0

while ループは、遅延したアクションが完了するのを待たずに、スケジュールを設定するだけです。問題は、すべてのイベントを非常に短いループでスケジュールし、10 秒後にすべてのイベントを同じようにすばやく実行することです。

于 2013-08-08T11:11:02.380 に答える