2016-06-22 4 views
0

Я новичок на сайте и быстро, поэтому любые отзывы по вопросу техники с благодарностью получены.Как изменить объект или функцию изменения ползунка?

Я пытаюсь изменить значение ползунка как аудио, которое оно воспроизводится, так и текстовой меткой (или изображением).

Я создал свои выходы:

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

и мои действия:

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

Все подключены к одному слайдера. Я не уверен, как подойти к этой проблеме - будет ли что-нибудь работать?

EDIT: Han Yong Код:

Был уже 'делать' для других звуков внутри приложения с использованием AVFoundation. Я импортировал Foundation (AVFoundation уже импортирован)

Я добавил:

@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) 
    } 
} 

И добавил следующее после функции делать (в viewDidLoad):

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


} 

Я обновил действие:

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

Однако у меня все еще возникают проблемы с ошибками. Кроме того, как я могу указать, какой звук он играет в зависимости от значения?

ответ

0

Я думаю, вы хотите, чтобы audioValue.text отображали одинаковое значение ползунка, не так ли? Попробуйте это:

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

Нет, не должно показывать значение ползунка - он должен показать текст, который изменяется в зависимости от значения –

0

Если вы используете AVFoundation и AVPlayer, sample source, что яблоко обеспечения будет полезно.

В этом источнике назначить var, который имеет метод get и set. В методе набора обновите свою метку и состояние игрока. (Источник Sample фрагмент не обновляет ярлык, но вы можете сделать это.)

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

Если слайдер изменился, вызвать метод набора переменного. Статус метки и игрока будет обновлен.

@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» для .currentTime 2. seekToTime не распознается как член AVAudioPlayer 3.timeObserverToken подходит к нерешенному идентификатору Поэтому проект не будет строить Звук должен полностью измениться на другую дорожку при изменении значения ползунка. Можете ли вы лучше сделать функцию do с AVAudioSession? –

Смежные вопросы