2016-05-18 1 views
1

Я создаю приложение для камеры, и я пытаюсь разоблачить текущую продолжительность экспозиции для пользователя. Поскольку это значение постоянно изменяется до тех пор, пока не будет установлено вручную, мне нужно использовать kvo для потоковой передачи значений пользователю. Я успешно сделал это с помощью ISO и могу наблюдать за изменениями в exposureDuration, но не могу принудить новое значение к объекту CMTime (который является тем, что является продолжительностью воздействия). Ниже приведен код, я использую, чтобы попытаться выполнить эту:Ключевое значение наблюдения экспозиция Длительность

override init() { 
    super.init() 

    captureDevice = self.selectCamera() 

    captureDevice?.addObserver(self, forKeyPath: "ISO", options: .New, context: &isoContext) 
    captureDevice?.addObserver(self, forKeyPath: "exposureDuration", options: .New, context: &shutterContext) 
} 

deinit { 
    captureDevice?.removeObserver(self, forKeyPath: "ISO") 
    captureDevice?.removeObserver(self, forKeyPath: "exposureDuration") 
} 

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    let newValue = change?[NSKeyValueChangeNewKey] 

    if context == &isoContext { 
    store.iso.value = newValue as! Float 
    } else if context == &shutterContext { 
    // The app crashes at this line. 
    // Thread 1: EXC_BREAKPOINT (code=1, subcode=0x100091670) 
    // newValue is "AnyObject" in the debug area 
    store.shutterSpeed.value = newValue as! CMTime 
    } 
} 

я делаю что-то неправильно, или это законная ошибка, что мне нужно подать с яблоком?

+0

Как вы это сделали для ISO? – Nil

+0

@Nil Вы можете увидеть это в примере, но обычный KVO работает так, как ожидалось. – Mike

ответ

0

экспонированиеДокументация нового значения не является CMTime, но NSValue. Это фиксированный код (swift3).

store.shutterSpeed.value = (newValue as! NSValue).timeValue 
Смежные вопросы