2017-11-13 2 views
2

:使用AVCapturePhotoSettings:AVCaptureDevice.FlashMode.autoにdevice.flashModeを設定デバイスのフラッシュモードをSwift 4でどのように設定しますか?私は、デバイスのフラッシュをオンにしようとする関数を呼び出してい

private func flashOn(device:AVCaptureDevice) 
{ 
    print("flashOn called"); 
    do { 

     try device.lockForConfiguration() 
     // line below returns warning 'flashMode' was deprecated in iOS 10.0: Use AVCapturePhotoSettings.flashMode instead. 
     device.flashMode = AVCaptureDevice.FlashMode.auto 
     device.unlockForConfiguration() 

    } catch { 

     // handle error 
     print("flash on error"); 
    } 

} 

が警告「『flashMode』がiOSの10.0で廃止されました起動します代わりに.flashModeを使用してください。 "それは単なる警告であっても、私のアプリをテストする場合には、フラッシュを有効にしませんので、私はにその行を変更します。

AVCapturePhotoSettings.flashMode = AVCaptureDevice.FlashMode.auto 
を:それは示唆しているようなので、私は、これにラインを設定

device.flashMode = AVCaptureDevice.FlashMode.auto 

そして私は、だから私はスウィフト4.0を使用してXcodeのバージョン9でフラッシュを設定する方法が分からない「インスタンスメンバー 『flashMode』タイプでは使用できません 『AVCapturePhotoSettings』」エラーが

を取得します。私がStack Overflowで見つけたすべての答えは以前のバージョンのものでした。

+1

「フラッシュライト」(英国では「トーチ」)を作ろうとするなら、 'torchMode'を使います。カメラのフラッシュを設定して写真を撮影する場合は、AVCaptureDeviceを使用する代わりに、必要に応じて 'AVCapturePhotoOutput'を' AVCapturePhotoSettings'で設定してください。 – rmaddy

+0

それは私が思ったものですが、タイプ値 "AVCapturePhotoSettings 'にはメンバー' AVCapturePhotoOutput 'がありません。私は写真を撮るときにフラッシュを消すために使っています。 – VagueExplanation

+0

「AVCapturePhotoOutput」のドキュメントから始めてください。 – rmaddy

答えて

3

私は同じ問題に直面しています。残念ながら、多くの有用な方法は、iOS10で非推奨になりました。ここで11は、私はそれを解決するために管理する方法である:

AVCapturePhotoSettingsオブジェクトは一意であり、再利用することはできませんので、あなたは、このメソッドを使用して新しい設定を毎回取得する必要があります:

func getSettings(camera: AVCaptureDevice, flashMode: CurrentFlashMode) -> AVCapturePhotoSettings { 
    let settings = AVCapturePhotoSettings() 

    if camera.hasFlash { 
     switch flashMode { 
      case .auto: settings.flashMode = .auto 
      case .on: settings.flashMode = .on 
      default: settings.flashMode = .off 
     } 
    } 
    return settings 
} 

ご覧のとおり、lockConfigurationは必要ありません。写真を取り込みながら、単純にそれを使用すると

enum CurrentFlashMode { 
    case off 
    case on 
    case auto 
} 

@IBAction func captureButtonPressed(_ sender: UIButton) { 
    let currentSettings = getSettings(camera: currentCamera, flashMode: currentFlashMode) 
    photoOutput.capturePhoto(with: currentSettings, delegate: self) 
} 

はそれに役立つことを願っています。

CurrentFlashModeは明確なものを維持するために作成された列挙型であり、

+0

はい、あります!これはずっと簡単なので、私は変更を歓迎します。私はそれがまだ多くのことを記録しているのを見ていない。 – VagueExplanation

関連する問題