如何防止在缩放的纵横比图像背景之外绘制?
我需要绘制图像,类似于标记,并且根据我所看到的,您必须将图像添加到 PKCanvasView 的背景中。
在下面的 SO 中,我或多或少做了同样的事情。但是,我的设备和图像尺寸并不相同。
struct MyCanvas: UIViewRepresentable {
var canvasView: PKCanvasView
let picker = PKToolPicker.init()
func makeUIView(context: Context) -> PKCanvasView {
self.canvasView.tool = PKInkingTool(.pen, color: .black, width: 15)
self.canvasView.isOpaque = false
self.canvasView.backgroundColor = UIColor.clear
self.canvasView.becomeFirstResponder()
let imageView = Image("badmintoncourt")
imageView.contentMode = .scaleAspectFit
imageView.clipsToBounds = true
let subView = self.canvasView.subviews[0]
subView.addSubview(imageView)
subView.sendSubviewToBack(imageView)
return canvasView
}
func updateUIView(_ uiView: PKCanvasView, context: Context) {
picker.addObserver(canvasView)
picker.setVisible(true, forFirstResponder: uiView)
}
}
我的屏幕尺寸是:(1194.0, 790.0),而图像尺寸是 (1668.0, 2348.0)。尽管图像视图具有适合的纵横比,但它不会自动缩放。
为了解决这个问题,我使用了几何阅读器并传入屏幕宽度/高度,然后设置 ImageView 的框架,现在相应地缩放图像。
问题是我可以在图像边界之外绘制垂直图像,水平查看,图像左右两侧有大量空白区域。我不想在那里画画。
无论如何将可绘制画布设置为与缩放图像相同?
另一个问题是,当我更改设备方向时,绘图不会像使用 Apple 的“标记”那样粘在图像上。我读了一点,似乎锚可以工作?不确定如何使用它们。