首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将UIImagePickerController cameraOverlayView定位在摄像机预览的顶部

将UIImagePickerController cameraOverlayView定位在摄像机预览的顶部
EN

Stack Overflow用户
提问于 2021-11-05 20:28:36
回答 1查看 414关注 0票数 3

我想添加一个覆盖到我的UIImagePickerController,但我只需要它包括相机预览,而不是在顶部或底部的相机控制。我在任何地方都找不到这样的方法,因为在每个设备上,顶部/底部的控制高度是不同的。我以前在其他应用程序上也见过。如有任何指导,将不胜感激。

代码语言:javascript
运行
复制
imagePicker.sourceType = .camera
            
let overlay = UIView()
overlay.backgroundColor = UIColor(white: 1, alpha: 0.5)

imagePicker.cameraOverlayView!.addSubview(overlay)
// This is using a UIView extension to constrain my views. It's as simple as it looks.
overlay.anchor(top: imagePicker.cameraOverlayView!.topAnchor, left: imagePicker.cameraOverlayView!.leftAnchor, bottom: imagePicker.cameraOverlayView!.bottomAnchor, right: imagePicker.cameraOverlayView!.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 100, height: 100)
        
self.present(imagePicker, animated: true, completion: nil)

我想要这个半透明的UIView只填充红色区域。我没有问题,创建的框架是3:4,但它不会正确地定位在Y轴。imagePicker.cameraOverlayView!.centerYAnchor与设备的centerYAnchor相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-27 19:45:57

也许不是最好的解决办法。使用视图调试器,您可以检查视图层次结构。现在将视图添加到子camera view port controller

代码语言:javascript
运行
复制
imagePicker = CustomPicker()
imagePicker.sourceType = .camera
present(imagePicker, animated: true, completion: nil)


class CustomPicker: UIImagePickerController {
    let overlay = UIView()
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if let camController = children.first?.children.first?.children.first, overlay.superview == nil {
            overlay.backgroundColor = UIColor(white: 1, alpha: 0.5)
            camController.view.addSubview(overlay)
            overlay.addPinConstraints(top: 0, left: 0, bottom: 0, right: 0)
        }
    }
}

extension UIView {
    func addPinConstraints(top: CGFloat? = nil, left: CGFloat? = nil, bottom: CGFloat? = nil, right: CGFloat? = nil) {
        guard let parent = superview else { return }
        translatesAutoresizingMaskIntoConstraints = false
        if let left = left {
            leadingAnchor.constraint(equalTo: parent.leadingAnchor, constant: left).isActive = true
        }
        if let right = right {
            trailingAnchor.constraint(equalTo: parent.trailingAnchor, constant: -right).isActive = true
        }
        if let top = top {
            topAnchor.constraint(equalTo: parent.topAnchor, constant: top).isActive = true
        }
        if let bottom = bottom {
            bottomAnchor.constraint(equalTo: parent.bottomAnchor, constant: -bottom).isActive = true
        }
    }
}

视图检查器的屏幕截图,这里的子->子->是照相机视图端口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69858926

复制
相关文章

相似问题

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