2016-05-18 4 views
1

私はカメラアプリを構築していますが、現在の露出時間をユーザーに公開しようとしています。この値は手動で設定するまで常に変化するので、kvoを使用して値をユーザーにストリーミングする必要があります。私はISOでこれを成功させ、exposureDurationへの変更を観察できますが、新しい値をCMTimeオブジェクトに強制することはできません(これは、exposureDurationと同じです)。これは私がリンゴを持つファイルする必要があり、正当なバグ私が何か間違ったことキー値観測露出時間

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

exposureDurationのnewValueはCMTimeではなくNSValueです。 これは固定コード(swift3)です。

store.shutterSpeed.value = (newValue as! NSValue).timeValue 
関連する問題