作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在研究为相机输入制作一个切换开关。我的目标是拥有一个我可以调用的枚举,如 CameraPosition.rear
或 CameraPosition.front
并且相机输入会相应地改变。这是我到目前为止得到的:
var currentCameraPosition: CameraPosition?
var frontCameraInput: AVCaptureDeviceInput?
var rearCameraInput: AVCaptureDeviceInput?
var currentCameraInput: AVCaptureDeviceInput?
enum CameraPosition {
case front
case rear
func toggle(){
switch self {
case .front:
currentCameraInput = frontCameraInput
case .rear:
currentCameraInput = rearCameraInput
}
}
}
问题是我的编译器提示 Instance member 'currentCameraInput' cannot be used on type 'Camera'
。我应该如何解决这个问题,或者我该如何重写它?
最佳答案
如果您愿意,您完全可以为此使用枚举。我建议使用 didSet
进行切换,而不必设置您的 CameraPosition
然后单独调用 toggle
。这样,设置您的相机位置将自动更新您的相机输入。我会这样设置:
var currentCameraPosition: CameraPosition? {
didSet {
if let position = currentCameraPosition {
switch position {
case .front: currentCameraInput = frontCameraInput
case .rear: currentCameraInput = rearCameraInput
}
}
}
}
var frontCameraInput: AVCaptureDeviceInput?
var rearCameraInput: AVCaptureDeviceInput?
var currentCameraInput: AVCaptureDeviceInput?
enum CameraPosition {
case front
case rear
}
您甚至可以放弃开关并使用三元运算符,因为您只有 2 个选项:
var currentCameraPosition: CameraPosition? {
didSet {
if let position = currentCameraPosition {
currentCameraInput = position == .front ? frontCameraInput : rearCameraInput
}
}
}
关于ios - 如何使用枚举制作切换开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48121343/
我是一名优秀的程序员,十分优秀!