Как нарисовать прямоугольник на виде с камеры и на ее снятом изображении? Оба прямоугольника должны покрывать одну и ту же часть / раму зрения

Я хочу нарисовать прямоугольник на виде с камеры и снятом изображении. Оба прямоугольника должны покрывать одну и ту же часть / рамку зрения. Мой код частично работает для устройств iPad, но не работает в iPhone. Пожалуйста, помогите мне достичь этого. Мой код

func drawRectangleOnCamera() {

    let rectangleLayer = CAShapeLayer()
    rectangleLayer.path = UIBezierPath(rect: getRectangleFrame(forSize:videoPreviewLayer.frame.size, isImage: false)).cgPath

    rectangleLayer.strokeColor = UIColor.red.cgColor
    rectangleLayer.fillColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0).cgColor
    cameraView.layer.insertSublayer(rectangleLayer, above: videoPreviewLayer)

}

func drawRectangleOnImage(originalImage: UIImage) -> UIImage {

    rectangleFrame = getRectangleFrame(forSize:originalImage.size, isImage: true)

    UIGraphicsBeginImageContextWithOptions(originalImage.size, false, UIScreen.main.scale)

    originalImage.draw(at: CGPoint(x: 0, y: 0))
    let context = UIGraphicsGetCurrentContext()!

    context.addRect(rectangleFrame)
    context.setStrokeColor(UIColor.red.cgColor)
    context.strokePath()

    if let newImage = UIGraphicsGetImageFromCurrentImageContext() {
        UIGraphicsEndImageContext()
        return newImage
    }
    return originalImage

}

//isImage = true, rectangle frame for captured image
//isImage = false, rectangle frame for camera view
//forSize: Size of videoPreviewLayer/Image
func getRectangleFrame(forSize: CGSize, isImage: Bool) -> CGRect {

    let scale = isImage ? UIScreen.main.scale : 1.0

    let recatangleSize = UIDevice.current.userInterfaceIdiom == .pad ? CGSize.init(width: 600, height: 350) : CGSize.init(width: 300, height: 200)

    var recatangleFrame = CGRect.init(x: 100, y: 100, width: recatangleSize.width/scale, height: recatangleSize.height/scale)
    recatangleFrame.origin.x = (forSize.width - recatangleFrame.size.width) / 2
    recatangleFrame.origin.y = (forSize.height - recatangleFrame.size.height) / 2

    return recatangleFrame
}

0 ответов

Другие вопросы по тегам