0

録音の開始時にタイマーを使用してナビゲーション バーをアニメーション化し、録音の停止時に停止するようにしています (ボイス メモ アプリと同様にするため)。

ここにコードがあります

//do nav bar animation
_navigationImageCount = 0;
self.navigationBarTimer = [NSTimer scheduledTimerWithTimeInterval:(2.0 / 28.0) target:self selector:@selector(changeNavigationBarImage:) userInfo:nil repeats:YES];

- (void)changeNavigationBarImage:(NSTimer *)timer
{   
    NSMutableArray *navigationBarImages = [NSMutableArray arrayWithArray:@[@"nav_bar_01.png", @"nav_bar_02.png", @"nav_bar_03.png", @"nav_bar_04.png", @"nav_bar_05.png", @"nav_bar_06.png", @"nav_bar_07.png", @"nav_bar_08.png", @"nav_bar_09.png", @"nav_bar_10.png", @"nav_bar_11.png", @"nav_bar_12.png", @"nav_bar_13.png", @"nav_bar_14.png"]];
    [navigationBarImages addObjectsFromArray:[[navigationBarImages reverseObjectEnumerator] allObjects]];

    NSInteger imageIndex = _navigationImageCount % 28;
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:navigationBarImages[imageIndex]] forBarMetrics:UIBarMetricsDefault];

    _navigationImageCount++;
}


- (void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
{
    [recorder stop];
    [self.recordingTimer invalidate]; //timer used to update the UI
    [self.navigationBarTimer invalidate];
}

ライブラリディレクトリの下の「MyRecordings」という名前のディレクトリにファイルに録音を保存しています。そのディレクトリの内容を印刷するとファイルが表示されますが、期間を印刷しようとすると0になります。

その URL でファイルを再生しようとすると、エラー コード 1685348671 (ファイルが無効です) が表示されます。

録音の最初の部分を正しく保存するにはどうすればよいですか?

4

2 に答える 2

0

これはタイマーの問題であることがわかりました。

タイマーは 2.0 / 28.0 = 0.7 秒ごとに 1 回呼び出されます。それが問題の原因でした。タイマーの持続時間を 0.2 に増やした場合は問題なく動作しましたが、アニメーションはあまりスムーズではありませんでした。

タイマー間隔として 0.1 を使用すると、ほとんどの場合は機能しましたが、常にではありませんでした。古いデバイス (第 2/第 3 世代の iPod) ではより簡単に再現できました。

OSがタイマーを介してそのような迅速な更新を処理できないということですか?

誰かが問題が何であるかを説明してもらえますか?

于 2013-08-26T13:40:05.767 に答える