首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift 4中设置设备的闪存模式?

如何在Swift 4中设置设备的闪存模式?
EN

Stack Overflow用户
提问于 2017-11-13 21:10:25
回答 2查看 9.4K关注 0票数 13

我调用一个函数试图打开设备的闪光灯:

代码语言:javascript
复制
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将显示警告"'flashMode‘在iOS 10.0中被废弃:使用AVCapturePhotoSettings.flashMode代替。“尽管这只是一个警告,但它在测试我的应用程序时不启用闪存,所以我将该行更改为:

代码语言:javascript
复制
device.flashMode = AVCaptureDevice.FlashMode.auto

所以我设定了这条线,就像它所暗示的:

代码语言:javascript
复制
AVCapturePhotoSettings.flashMode = AVCaptureDevice.FlashMode.auto

我得到错误“实例成员'flashMode‘不能在’AVCapturePhotoSettings‘类型上使用

因此,我不知道如何使用SWIFT4.0在Xcode版本9中设置闪存。我在Stack溢出中找到的所有答案都是针对早期版本的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-30 13:52:33

我也面临着同样的问题。不幸的是,许多有用的方法在iOS10和11中被废弃了。

AVCapturePhotoSettings对象是唯一的,不能重用,因此每次使用此方法都需要获得新的设置:

代码语言:javascript
复制
/// 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。

然后在拍摄照片时使用它:

代码语言:javascript
复制
 @IBAction func captureButtonPressed(_ sender: UIButton) {
    let settings = getSettings(camera: camera, flashMode: flashMode)
    photoOutput.capturePhoto(with: settings, delegate: self)
}

希望能帮上忙。

票数 17
EN

Stack Overflow用户

发布于 2018-07-02 05:47:10

关于目标C:

代码语言:javascript
复制
- (IBAction)turnTorchOn: (UIButton *) sender {
    sender.selected = !sender.selected;
    BOOL on;
    if (sender.selected) {
        on = true;
    } else {
        on = false;
    }
    // check if flashlight available
    Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
    if (captureDeviceClass != nil) {
        AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        AVCapturePhotoSettings *photosettings = [AVCapturePhotoSettings photoSettings];
        if ([device hasTorch] && [device hasFlash]) {
            [device lockForConfiguration:nil];
            if (on) {
                [device setTorchMode:AVCaptureTorchModeOn];
                photosettings.flashMode = AVCaptureFlashModeOn;
                //torchIsOn = YES; //define as a variable/property if you need to know status
            } else {
                [device setTorchMode:AVCaptureTorchModeOff];
                 photosettings.flashMode = AVCaptureFlashModeOn;
                //torchIsOn = NO;
            }
            [device unlockForConfiguration];
        }
    }
 }
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47273601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档