0

ラベルに5から1までのカウントダウンタイマーを表示しています。カウントダウンタイマーが表示されているときに、特定のラベルのバックグラウンドでオーディオを再生しようとしています。つまり、5が表示されている場合は、5のオーディオサウンドを再生する必要があり、4が1秒後に表示されている場合は4のオーディオサウンドを再生する必要があります。コードを実行しましたが、問題は5、4、3、2、1のすべてのオーディオサウンドが同時に再生されることです。これが私のコードです。

-(void)viewWillAppear:(BOOL)animated
{
    countDown = 7;
    exitcountdown = 0;
    lblCountdown.hidden = YES;
    btnCancel.hidden = YES;
    lblCancel.hidden = YES;
    countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
    [countDownTimer fire];


}





-(void)updateTime:(NSTimer*)timerParam
{

    countDown--;
    if (countDown==5)
    {
        lblCountdown.hidden = NO;
        lblCountdown.text = [NSString stringWithFormat:@"%d",countDown];
        NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d",countDown] ofType:@"mp3"]; 
                if ([player isPlaying])
        {
            [player stop];
        }
        player= [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
        player.delegate = self;
        [player stop];
        [player setCurrentTime:0.0];
        [player setVolume:100.0];
        [player play];
        lblCancel.hidden = NO;
        btnCancel.hidden = NO;
        lblWarning.hidden = YES;
        lblGps.hidden = YES;

        [countDownTimer fire];
    }
    else if (countDown==0)
    {
        [self sendRequest];
        countDownTimerexit = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(exitBackground:) userInfo:nil repeats:YES];
        [countDownTimerexit fire];
        NSString *phoneLinkString = [NSString stringWithFormat:@"tel://%@", self.emergencyphonenumber];
        NSURL *phoneLinkURL = [NSURL URLWithString:phoneLinkString];
        [[UIApplication sharedApplication] openURL:phoneLinkURL];

        [self clearCountDownTimer];
        btnCancel.hidden = YES;
        lblCancel.hidden = YES;

    }
    lblCountdown.text = [NSString stringWithFormat:@"%d",countDown];
}

lblCountdownは、countDownが5,4,3,2,1として出力されるラベルです。countDownはint変数ですcountDownTimerはNSTimer変数です

4

1 に答える 1

0

ラベルにテキストを表示することは、サウンドを再生するよりも高速なプロセスだと思うので、コードで何が起こっていますか。5 が表示され、5 の音が到達する前に再生音を要求してカウンターが 4 になり、その後プレーヤーを停止して次のファイルを要求します。

サウンドの再生と次の番号の表示の間に遅延を挿入してみてください。

于 2012-04-05T04:26:24.470 に答える