与子视图共享 PKCanvasView 作为图像
Posted
技术标签:
【中文标题】与子视图共享 PKCanvasView 作为图像【英文标题】:Sharing PKCanvasView with a subview as an Image 【发布时间】:2020-06-08 03:38:28 【问题描述】:我有一个PKCanvasView
,其子视图为UIImageView
。
我想以UIImage
的身份分享这个观点。这将是 UIImageView
及其上方的 PKCanvasView.drawing
。
这是我获得绘图部分的方式。我只是不确定如何获得UIImageView
。
private func image(from canvas: PKCanvasView) -> UIImage
let drawing = canvas.drawing
let visibleRect = canvas.bounds
let image = drawing.image(from: visibleRect, scale: UIScreen.main.scale)
return image
更新:
这是我目前正在尝试的:
let format = UIGraphicsImageRendererFormat.default()
format.opaque = false
let visibleRect = CGRect(x: 0, y: 0, width: self.imageView.frame.size.width, height: self.imageView.frame.size.height)
let image = UIGraphicsImageRenderer(size: self.imageView.frame.size, format: format).image context in
imageView.image?.draw(in: visibleRect, blendMode: .normal, alpha: 1.0)
canvasView.drawing.image(from: visibleRect, scale: UIScreen.main.scale).draw(at: .zero)
我面临的问题是我的图像被从上到下拉伸。有些图像比其他图像多。
【问题讨论】:
【参考方案1】:您需要创建一个新的图形上下文,将图像绘制到其中,然后在其上绘制图形。您的代码应如下所示:
let format = UIGraphicsImageRendererFormat.default()
format.opaque = false
let image = UIGraphicsImageRenderer(size: imageView.frame.size, format: format).image context in
imageView.image?.draw(at: .zero)
canvas.drawing.image(from: imageView.frame, scale: UIScreen.main.scale).draw(at: .zero)
【讨论】:
谢谢利奥。这很接近。我面临的问题是图像比预期的大,所以图像和它上面的绘图/着色不对齐。 @LukeIrvin 您应该根据图像大小创建画布大小 当然,肯定会。只是想让我的形象在出口时看起来正确。然后我可以更新画布大小以匹配图像大小。 您必须先设置画布。设置 CanvasViewControler 时canvasView.frame = view.frame
和 canvasView.contentSize = imageView.frame.size
以上是关于与子视图共享 PKCanvasView 作为图像的主要内容,如果未能解决你的问题,请参考以下文章