デバイスのフラッシュをオンにしようとする関数を呼び出しています。
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");
}
}
device.flashModeをAVCaptureDevice.FlashMode.autoに設定すると、「iOS10.0では「flashMode」は非推奨になりました。代わりにAVCapturePhotoSettings.flashModeを使用してください。」という警告が表示されます。これは単なる警告ですが、アプリのテスト時にフラッシュが有効にならないため、その行を次のように変更します。
device.flashMode = AVCaptureDevice.FlashMode.auto
だから私はそれが示唆するように、これに線を設定しました:
AVCapturePhotoSettings.flashMode = AVCaptureDevice.FlashMode.auto
そして、「インスタンスメンバー 'flashMode'はタイプ 'AVCapturePhotoSettings'では使用できません」というエラーが表示されます。
そのため、Swift4.0を使用してXcodeバージョン9でフラッシュを設定する方法がわかりません。Stack Overflowで見つけたすべての答えは、以前のバージョンのものです。
私は同じ問題に直面しています。残念ながら、iOS10と11では多くの便利なメソッドが非推奨になりました。これを解決する方法は次のとおりです。
AVCapturePhotoSettingsオブジェクトは一意であり、再利用できないため、次のメソッドを使用するたびに新しい設定を取得する必要があります。
/// the current flash mode
private var flashMode: AVCaptureDevice.FlashMode = .auto
/// Get settings
///
/// - Parameters:
/// - camera: the camera
/// - flashMode: the current flash mode
/// - Returns: AVCapturePhotoSettings
private func getSettings(camera: AVCaptureDevice, flashMode: AVCaptureDevice.FlashMode) -> AVCapturePhotoSettings {
let settings = AVCapturePhotoSettings()
if camera.hasFlash {
settings.flashMode = flashMode
}
return settings
}
ご覧のとおり、lockConfigurationは必要ありません。
次に、写真をキャプチャするときに使用します。
@IBAction func captureButtonPressed(_ sender: UIButton) {
let settings = getSettings(camera: camera, flashMode: flashMode)
photoOutput.capturePhoto(with: settings, delegate: self)
}
それが役立つことを願っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加