为什么我不能在 SwiftUI 中调用任何硬件方法



我正在尝试在我的Swift应用程序中打开和关闭iOS设备的手电筒。

通过查看文档,我可以看到lockForConfiguration(),setTorchModeOn(1.0)unlockForConfiguration()是我需要调用的。

然而,这些方法显然是not in scope。我的第一个想法是这些方法是针对Objective-C的,但是文档显示这些方法实际上是针对Swift的。

我可能调用这些方法不正确。然而,从我所看到的,我可以称这些方法为raw(没有父脚本/类)。

import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello")
}

func turnTorchOn() {
lockForConfiguration()
setTorchModeOn(1.0)
unlockForConfiguration()
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

AVCaptureDevice仅适用于Objective-C,我能找到的其他一切也适用于Objective-C。有人能解释一下我如何在Swift中做到这一点吗?提前感谢!

您需要一个AVCaptureDevice实例来调用这些方法。

import SwiftUI
import Combine
import AVKit
class CaptureSession: ObservableObject {
lazy var device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)
}
struct ContentView: View {
@StateObject var session = CaptureSession()

var body: some View {
Text("Hello")
.onTapGesture {
turnTorchOn()
}
}

func turnTorchOn() {
do {
let device = session.device
try device?.lockForConfiguration()
defer { device?.unlockForConfiguration() }
try device?.setTorchModeOn(level: 1.0)
} catch {
print("Can't turn torch on, check device has LED flash!")
}
}
}

在这个例子中,我们获得了设备的默认后置摄像头(假设它有一个火炬),当我们点击标签时,我们将特定的设备设置为打开。因为SwiftUI视图可以在任何时候重新绘制,我们需要让device在视图在屏幕上的时候就存在,所以我们在StateObject中持久化它。

相关内容

最新更新