0

こんにちは、CFAbsoluteTimeGetCurrent(); で日付を記録しようとするたびに。私のアプリは残りのボタンを無視します。まるですべてのメモリを占有し、すべてのユーザー入力をブロックしているかのようです。私は何が間違っているのだろうと思っていましたか?関数 showtime() を作成することを考えましたが、関数間で値を toggleRecording から showtime に渡す方法がわからないため、これで問題が解決する場合でもメソッドが機能します。以下は私のコードです:

- (IBAction)toggleRecording:(id)sender
{
    // Start recording if there isn't a recording running. Stop recording if there is.
    [[self recordButton] setEnabled:NO];
    if (![[[self captureManager] recorder] isRecording]){
        [[self captureManager] startRecording];

        /* figure out a day to record for every half a second
         while([[[self captureManager]recorder] isRecording]){
         CFTimeInterval startTime = CFAbsoluteTimeGetCurrent();
         NSLog(@" time is %i", startTime);
         }

        */
    }
    else
        [[self captureManager] stopRecording];


}

-(void)showtime:(id)sender{
    while([[[self captureManager]recorder] isRecording]){
        CFTimeInterval startTime = CFAbsoluteTimeGetCurrent();
        NSLog(@" time is %f", startTime);
    }
}
4

1 に答える 1

2

アプリケーションは、イベント ループを実行してイベントを受信する必要があります。独自のコードが別の処理を行っている間 (ここでは "while" ループを実行しています)、イベントはキューに入れられ、コードが戻るまで配信されません。

概略的には、アプリケーションは次のようなことをしています:

while(1) {
    event = _UIReceiveNextQueuedEvent();
    _UIProcessEvent(event); // <- this calls -showTime:
}

ループをブロックせずに時間を記録したい場合は、NSTimer0.5 秒ごとにスケジュールし、記録がオフになるとすぐに無効にする必要があります。

何かのようなもの:

- (void)showTime:(id)sender
{
    if ([[[self captureManager]recorder] isRecording]) {
        [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
    }
}

- (void)timerFired:(NSTimer *)timer
{
    if ([[[self captureManager]recorder] isRecording]) {
        CFTimeInterval startTime = CFAbsoluteTimeGetCurrent();
        NSLog(@" time is %f", startTime);
    } else {
        [timer invalidate];
    }
}
于 2012-08-15T18:55:54.660 に答える