2016-03-19 34 views
1

私は難しい時が来ています。 iOSアプリで写真を撮るときにフラッシュを灯したいだけです。私が試みたのはすべて失敗したか、20%しか働いていない。ここでAVCaptureDeviceをフラッシュで使用することはできません

は、コードがフラッシュを点灯する解雇である:

// Here we have: captureDevice.hasFlash && captureDevice.isFlashModeSupported(.On) 
    do {try captureDevice.lockForConfiguration() 
     captureDevice.flashMode = .On 
     captureDevice.unlockForConfiguration() 
    } catch let error as NSError { 
     print("captureDevice.lockForConfiguration FAILED") 
     print(error.code) 
    } 

私は最後までtryブロック内の2行を移動させることにより、または含む関数を呼び出すことにより、コードのいくつかの味を試してみました異なる点からこのコード。しかし、すべてのケースでこれを実行している時:

stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) { 
(imageDataSampleBuffer, error) -> Void in 

私は次のエラーを取得する:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x13f079340 {Error Domain=NSOSStatusErrorDomain Code=-16800 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16800), NSLocalizedDescription=The operation could not be completed} 

私はその後、ライン交換する場合:によって

captureDevice.flashMode = .On 

を:

captureDevice.torchMode = .On 

多かれ少なかれ動作します(残念ながら少なめ)、エラーなしで、これはトーチを使用しているので、私はタイミングの問題を取得:

captureSession.commitConfiguration() 

答えて

0
:私は自分のコードの中でいくつかの点で、このラインを使用する必要がある場合にも、それは明らかではない

誰か他の人が同じ問題に遭遇した場合(私は不運な唯一の人だとは思えません!)ここで

は私が見つけることによって終わったソリューションです。これら2つの命令のうち、最初のものは最初に実行されなければならないことを思わ

(必要に応じてAVFoundation上の任意の専門家は、さらに、コメントを作るために歓迎されている):

そして、フラッシュを発光させるという事実は、いくらかランダムな順序になります。 これを解決するために、私は第2の命令を最初の命令の完了ブロックの中に持ってきました。そうすることによって、順序が常に同じであることを確認します。

それから私は使用することができます。

captureDevice.flashMode = .On // or .Off or .Auto 

、それすべての作品を。

フラッシュが使用しているモードを設定するコードであり、フラッシュライトが鳴るたびに呼び出されるコードではないことに注意してください(この記事の冒頭に示すように)。

関連する問題