4

スクラバーとして機能するUISliderがあります。親指をドラッグすると、次のように実行します。

- (void) _seekTo:(double)playbackTime {
     mPlayer.currentPlaybackTime = playbackTime;
}

それはうまくいきます、音楽は前進を求めています。親指を離すと、NSTimerを再起動して時間の更新を送信し、UISliderの同期を維持します。問題は、親指を離すと、最初の数回のコールバックに前の時間値が含まれることです。これにより、親指は新しい値に戻る前に元の位置に戻ります。非常に見苦しい。

誰かがこの振る舞いと修正する方法の経験がありますか?この異常を実証したい場合は、サンプルプロジェクトを提供できます。

4

2 に答える 2

1

おそらくそれは、シークを開始したときにバッファにすでにデコードされたデータがあるためです。1分先を探しますが、バッファに数ミリ秒のオーディオがあり、これらのバケットが再生されると、プレーヤーはファイル内の位置を現在のものとして報告します。その後、更新された位置から新しいバケットが来て、マーカーが動作を開始します。(単なる理論です。)

中間データを手作業で単純にフィルタリングすることはできませんか?スライダーを使用してジャンプした量がわかっているので、新しい位置を変数に保存し、プレーヤーからの更新が新しいスライダーの位置に快適に近づくまで無視することができます。(それが理にかなっていることを願っています。)

于 2010-03-04T12:47:32.350 に答える
0

私は同じ問題を抱えています。NSTimer(スライダーを更新するための)作成を別の(1.5秒に設定)で単に遅らせていNSTimerます。これは、スライダーが押されなくなったときに発生します。

于 2019-11-23T12:24:40.433 に答える