2016-06-22 34 views
0

私はこのサイトとSwiftの初心者ですので、質問のテクニックに関するフィードバックは感謝して受け取ります。スライダの値を変更する方法オブジェクトまたは関数?

私は、スライダの値を再生中のオーディオとテキストラベル(またはイメージ)の両方に変更しようとしています。

私は私のアウトレットを作成しました:

@IBOutlet weak var audioSlider: UISlider! 
@IBOutlet weak var audioValue: UILabel! 

そして、私のアクション:

@IBAction func audioSliderValueChanged(sender: UISlider) { 
    var currentValue = (sender.value) 
    audioValue.text = (StringInterpolationConvertible: audioValue)) 

すべて1つのスライダに接続されています。私はこの問題にどのように接近するのか分かりません。

EDIT:漢龍コード:

AVFoundationを使用して、アプリ内の他の音のために「を実行」は既にありました。私は輸入財団(AVFoundationがすでにインポートされた)

私が追加しました:私はアクションを更新しました

{timeObserverToken = audioSliderPlayer.addPeriodicTimeObserverForInterval(interval, queue: dispatch_get_main_queue()) { 
     [weak self] time in 
     self?.timeSlider.value = Float(CMTimeGetSeconds(time)) 
     }} 


} 

:(のviewDidLoad以内)を行う関数の後に、次の

@IBOutlet weak var audioSlider: UISlider! 
@IBOutlet weak var audioValue: UILabel! 
var audioSliderPlayer:AVAudioPlayer = AVAudioPlayer() 
var currentTime: Double { 
    get { 
     return CMTimeGetSeconds(audioSliderPlayer.currentTime) 
    } 
    set { 
     let newTime = CMTimeMakeWithSeconds(newValue, 1) 
     audioSliderPlayer.seekToTime(newTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero) 
    } 
} 

て、コメントを追加しました:

@IBAction func timeSliderDidChange(sender: UISlider) { 
    currentTime = Double(sender.value) 
} 

ただし、まだエラーが発生しています。また、どのようにそれが値に依存して再生するオーディオを指定することができるでしょうか?

答えて

0

audioValue.textには、同じ値のスライダーが表示されますか?あなたはアップルが提供するAVFoundationとAVPlayer、sample sourceを使用する場合は参考になります

@IBAction func audioSliderValueChanged(sender: UISlider) { 
    var currentValue = (sender.value) 
    audioValue.text = "\(currentValue)" 
} 
+0

んが、それは、スライダーの値を示してはならない - それは価値 –

0

: これを試してみてください。

このソースでは、getメソッドとsetメソッドを持つvarを割り当てます。 setメソッドで、ラベルとプレーヤーの状態を更新します。 (サンプルソーススニペットラベルを更新しませんが、あなたはそれを作ることができます。)

var currentTime: Double { 
    get { 
     return CMTimeGetSeconds(player.currentTime()) 
    } 
    set { 
     let newTime = CMTimeMakeWithSeconds(newValue, 1) 
     player.seekToTime(newTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero) 
    } 
} 

スライダが変更された場合、それは変数のsetメソッドをトリガーします。ラベルとプレーヤーのステータスが更新されます。

@IBAction func timeSliderDidChange(sender: UISlider) { 
    currentTime = Double(sender.value) 
} 

addPeriodicTimeObserverForIntervalメソッドをAVPlayerに追加します。設定した間隔ごとに呼び出され、変数のセッターを起動します。

ない
timeObserverToken = player.addPeriodicTimeObserverForInterval(interval, queue: dispatch_get_main_queue()) { 
     [weak self] time in 
     self?.timeSlider.value = Float(CMTimeGetSeconds(time)) 
    } 
+0

に依存して変化したテキストを表示する必要があり、この提案漢をありがとう - 私は質問がある - オリジナルのポスト編集を参照してください –

+0

私は発生したエラーについて知りたい。スライダが変更されると、オーディオの開始時刻を変更する必要があります。そうですか? –

+0

1. 'get'には、戻り値にエラーがあります。 - 現在の時刻のために 'NSTimeInterval型の値を変換できません'。 2. seekToTimeはAVAudioPlayerのメンバーとして認識されていません 3。timeObserverTokenが未解決の識別子を返しています したがって、プロジェクトは作成されません スライダの値が変更されたときにオーディオを別のトラックに完全に変更する必要があります。 AVAudioSessionで 'do関数を実行する方がよいでしょうか? –

関連する問題