Je suis en train de créer une application pour appareil photo et j'essaie d'exposer la durée d'exposition actuelle à l'utilisateur. Comme cette valeur change constamment jusqu'à ce qu'elle soit définie manuellement, je dois utiliser kvo pour transmettre les valeurs à l'utilisateur. Je l'ai fait avec succès avec le ISO
, et peut observer les changements au exposureDuration
, mais ne peut pas contraindre la nouvelle valeur à un objet CMTime
(qui est ce que exposureDuration est). Voici le code que je utilise pour essayer de réaliser ceci:Valeur clé observant l'expositionDurée
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
}
}
que je fais quelque chose de mal, ou est-ce un bug légitime que je dois déposer à la pomme?
Comment l'avez-vous fait pour ISO? – Nil
@Nil Vous pouvez le voir dans l'exemple, mais KVO normal fonctionne comme prévu. – Mike