Как нарисовать прямоугольник на виде с камеры и на ее снятом изображении? Оба прямоугольника должны покрывать одну и ту же часть / раму зрения
Я хочу нарисовать прямоугольник на виде с камеры и снятом изображении. Оба прямоугольника должны покрывать одну и ту же часть / рамку зрения. Мой код частично работает для устройств 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
}