当前位置: 首页 > 面试题库 >

如何快速打开和关闭手电筒?

路裕
2023-03-14
问题内容

我想在我的Swift应用程序中添加手电筒功能。我该怎么做呢?


问题答案:

更新#1:
torchActive没有返回预期值,这或许是因为它已经修改)

更新#2: 对于Swift 2.0

要将闪光灯从打开切换到关闭(不仅像疯猪的回答中那样“打开”),还可以使用以下方法:

func toggleFlash() {
    let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    if (device.hasTorch) {
        do {
            try device.lockForConfiguration()
            if (device.torchMode == AVCaptureTorchMode.On) {
                device.torchMode = AVCaptureTorchMode.Off
            } else {
                do {
                    try device.setTorchModeOnWithLevel(1.0)
                } catch {
                    print(error)
                }
            }
            device.unlockForConfiguration()
        } catch {
            print(error)
        }
    }
}

我使用嵌套的do-catch块来实现注释中的Awesomeness建议。这样,即使try device.setTorchModeOnWithLevel(1.0)发生故障,也可以将设备正确解锁以进行配置。

更新#3: 对于Swift 4:

(我根据个人喜好对代码进行了编辑)

func toggleFlash() {
    guard let device = AVCaptureDevice.default(for: AVMediaType.video) else { return }
    guard device.hasTorch else { return }

    do {
        try device.lockForConfiguration()

        if (device.torchMode == AVCaptureDevice.TorchMode.on) {
            device.torchMode = AVCaptureDevice.TorchMode.off
        } else {
            do {
                try device.setTorchModeOn(level: 1.0)
            } catch {
                print(error)
            }
        }

        device.unlockForConfiguration()
    } catch {
        print(error)
    }
}

原始答案:

要将闪光灯从打开切换到关闭(不仅像疯猪的回答中那样“打开”),还可以使用以下方法:

func toggleFlash() {
    let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    if (device.hasTorch) {
        device.lockForConfiguration(nil)
        let torchOn = !device.torchActive
        device.setTorchModeOnWithLevel(1.0, error: nil)
        device.torchMode = torchOn ? AVCaptureTorchMode.On : AVCaptureTorchMode.Off
        device.unlockForConfiguration()
    }
}


 类似资料:
  • 问题内容: 我正在尝试拨打的电话不是使用特定号码,而是使用在变量中被调用的号码,或者至少告诉它在您的电话中提取该号码。这个在变量中被调用的数字是我使用解析器或从网站sql检索到的数字。我做了一个按钮,试图用一个函数调用存储在变量中的电话号码,但无济于事。一切都会帮助谢谢! 问题答案: 试一试: 假设电话号码在。 的返回Optional,因此使用可以确保它是(而不是)返回的。 对于Swift 3:

  • 本章讨论的是如何进入和退出CGDB。有如下几种方法: 在命令行下输入 'cgdb' 运行CGDB 在GDB窗口输入 'quit' 或者按下 'Ctrl+D' 退出CGDB 在源代码窗口输入 ':quit' 也可以退出CGDB。这在GDB挂起或者运行一条耗时很长的指令时也同样起作用

  • 问题内容: 我试图在Swift中声明一个需要可选闭包的参数。我声明的函数如下所示: 但是Swift抱怨说,“条件”中的绑定值必须是一个可选类型,其中声明了“ if let”。 问题答案: 您应该将可选的闭包括在括号中。这将适当地限制操作员的范围。

  • 我有下面的方法,每隔几秒钟插入一大批记录。运行一段时间后,我得到如下错误: 错误:通信链接失败 从服务器成功接收的最后一个数据包是523毫秒前。上次成功发送到服务器的数据包是8毫秒前。 May 16, 2013 9:48:30 AM com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO: 签入语句问题,丢弃。 com

  • 我复制了一个模板从coDepen。这段代码非常过时,有一些旧的cdn链接。这意味着我必须找到这些链接的更新版本。我是如此接近使应用程序完全功能,我需要打开后关闭模式。我相信这和自举有关。链接和模态代码如下。

  • 问题内容: 我正在对服务器进行API调用。我正在利用Alamofire来解决这个问题。我正在尝试创建一个使用Alamofire的GET函数返回基于自定义类的对象的函数,该类包含此GET函数提供的各种输出。 我不清楚执行此操作的方式。 这是我的自定义类,其中包含有关响应的详细信息: 在另一个类中,我具有以下功能: 这将返回,因为在执行之前对服务器的调用未完成。我知道我应该能够使用闭包来做到这一点,但