相机预览中的SwiftUI位置叠加

用户名

我正在尝试在某些设备上使用人像,而在其他设备上使用风景的应用程序中,将类似于目标的叠加层添加到照片预览中。我可以手动设置坐标,但无法获取相机预览框架的正确坐标。

这是一个SwiftUI应用程序,因此我正在UIViewControllerRepresentable中进行摄像头工作。这就是我所拥有的,显然,当设备和/或方向改变时,目标圆总是错误的。我似乎无法捕获存在相机预览的模态视图的框架。我希望能够在模态视图上指定摄像机预览的框架和位置。

struct CaptureImageView: View {
    @Binding var isShown: Bool
    @Binding var image: Image?
    @Binding var newUIImage: UIImage?
    @Binding var showSaveButton: Bool

    func makeCoordinator() -> Coordinator {
        return Coordinator(isShown: $isShown, image: $newUIImage, showSaveButton: $showSaveButton)
    }
}

extension CaptureImageView: UIViewControllerRepresentable {

    func makeUIViewController(context: UIViewControllerRepresentableContext<CaptureImageView>) -> UIImagePickerController {

        let vc = UIImagePickerController()

        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera) {
            vc.sourceType = .camera
            vc.allowsEditing = true
            vc.delegate = context.coordinator

            let screenSize: CGRect = UIScreen.main.bounds
            let screenWidth = screenSize.width
            let screenHeight = screenSize.height

            vc.cameraOverlayView = CircleView(frame: CGRect(x: (screenWidth / 2) - 50, y: (screenWidth / 2) + 25, width: 100, height: 100))

            return vc
        }
        return UIImagePickerController()
    }

    func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<CaptureImageView>) {
    }
}

这是想法-但目标始终需要居中:

在此处输入图片说明

和目标文件:

class CircleView: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.clear
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func draw(_ rect: CGRect) {
        if let context = UIGraphicsGetCurrentContext() {
            context.setLineWidth(3.0)
            UIColor.red.set()

            let center = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
            let radius = (frame.size.width - 10) / 2

            context.addArc(center: center, radius: radius, startAngle: 0.0, endAngle: .pi * 2.0, clockwise: true)
            context.strokePath()
        }
    }
}

任何指导将不胜感激。Xcode版本11.3.1(11C504)

用户名

虽然我仍然想找到获取摄像机框架的方法的答案,但我的目标主要可以通过在VStack中创建一个圆形视图来实现,如下所示:

if showCaptureImageView {
    ZStack {
        CaptureImageView(isShown: $showCaptureImageView, image: $myImage, newUIImage: $newUIImage, showSaveButton: $showSaveButton)

        Circle()
            .stroke(Color.red, style: StrokeStyle(lineWidth: 10 ))
            .frame(width: 100, height: 100)
            .offset(CGSize(width: 0, height: -50.0))
    }
}//if show

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

保存叠加图像+相机预览

来自分类Dev

动画叠加了相机活动预览

来自分类Dev

在相机预览上移动叠加图像

来自分类Dev

在相机预览上移动叠加图像

来自分类Dev

如何仅将叠加层约束到UIImagePickerController相机预览

来自分类Dev

片段中的Android相机预览

来自分类Dev

预览中旋转的ovr相机

来自分类Dev

预览中的Mac设备的SwiftUI预览

来自分类Dev

捕获相机并在div中显示预览

来自分类Dev

从相机预览中获取触摸像素的颜色

来自分类Dev

遮罩未在OpenCV相机预览中显示

来自分类Dev

如何在“活动”中显示相机预览?

来自分类Dev

捕获相机并在div中显示预览

来自分类Dev

SwiftUI:在ViewModel中预览数据

来自分类Dev

在Xcode中简化SwiftUI预览

来自分类Dev

获取相机在opengl中的位置

来自分类Dev

相机在正投影中的位置

来自分类Dev

获取相机在opengl中的位置

来自分类Dev

如何在Windows中隐藏Firefox相机图标叠加层

来自分类Dev

在ios相机叠加层UIPickercontroller中更改标签的文本

来自分类Dev

在相机上叠加图像

来自分类Dev

在相机上叠加图像

来自分类Dev

在预览模式下是否可以在cwac相机中调整曝光?

来自分类Dev

如何在CameraX上的相机预览中裁剪图像矩形

来自分类Dev

使用Native Client SDK在Chrome中渲染相机预览

来自分类Dev

在固定位置叠加层中滚动

来自分类Dev

扩展了Android相机预览

来自分类Dev

RGBIR的Tango相机预览

来自分类Dev

CWAC相机的预览尺寸