0

オーディオ プレーヤーがあり、現在の再生時間を表示したいと考えています。カスタムプレイクラスを使用しています。

アプリは mp3 をファイルにダウンロードし、5% がダウンロードされるとファイルから再生します。ファイルが再生されると進行状況ビューが更新され、進行状況ビューへの呼び出しごとにラベルが更新されます。ただし、これはぎくしゃくしています... 1桁または2桁後退することさえあります。

NSTimer を使用して物事をスムーズにすることを検討していました。私は毎秒メソッドに解雇され、再生率の数値をメソッドに渡し、ラベルを更新します。

まず、これは合理的に思えますか?

次に、パーセンテージ (フロート) をタイマーのターゲットに渡すにはどうすればよいですか。現在、私はプレイされた割合を辞書に入れていますが、これは最適とは言えません。

これは、進行状況バーの更新と呼ばれるものです。

-(void)updateAudioProgress:(Percentage)percent {
    audio = percent;
    if (!seekChanging) slider.value = percent;

    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];  

    [myDictionary setValue:[NSNumber numberWithFloat:percent] forKey:@"myPercent"];


    [NSTimer scheduledTimerWithTimeInterval:5
                                     target:self 
                                   selector:@selector(myTimerMethod:) 
                                   userInfo:myDictionary 
                                    repeats:YES];
    [myDictionary release];
}

これは最初に 5 秒後に呼び出されますが、メソッドが呼び出されるたびに更新されます。

いつものように、コメントとポインタは感謝しています。

4

1 に答える 1

0

UserInfo は void * であるため、パーセンテージの int を直接渡すか、NSNumber オブジェクトへのポインターを渡すことができます。NSDictionary である必要はありません。それとは別に、辞書の使用は標準的なアプローチであり、過度のオーバーヘッドはありません。

このメソッドが呼び出されるたびに 5 秒間繰り返す新しいタイマーを作成していることに注意してください。繰り返しタイマー (または通常のタイマー) を作成するときは、不要な場合は必ず無効にする必要があります。

于 2010-04-23T02:04:03.883 に答える