繁体   English   中英

如何将 UIImage 转换或加载到 PKDrawing 中?

[英]How do I convert or load a UIImage into a PKDrawing?

我希望能够将 PNG 文件加载到 PKCanvasView 中,以便能够绘制和擦除其中的一部分。 有没有办法做到这一点?

首先,将 UIImageView 放在 PKCanvasView 后面,然后将 PKCanvasView opaque 设置为 false,将 color 设置为 clear。

然后在 PKCanvasViewDelegate 中:

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return YOUR_IMAGEVIEW
}

func scrollViewDidZoom(_ scrollView: UIScrollView) {

    let offsetX: CGFloat = max((scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5, 0.0)
    let offsetY: CGFloat = max((scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5, 0.0)
    YOUR_IMAGEVIEW.frame.size = CGSize(width: self.view.bounds.width * scrollView.zoomScale, height: self.view.bounds.height * scrollView.zoomScale)
    YOUR_IMAGEVIEW.center = CGPoint(x: scrollView.contentSize.width * 0.5 + offsetX, y: scrollView.contentSize.height * 0.5 + offsetY)

}

正如苹果所说,将你的 imageView 放在 viewForZooming 中就足够了,但它不起作用。 所以我在 scrollViewDidZoom 中添加了上面的代码,它就像它应该的那样工作。

我找不到任何关于此的官方文档,但我通过添加 UIImageView 作为 PKCanvasView 的第一个子视图的子视图来使其工作。 通过设置 .maximumZoomScale=1 和 .minimumZoomScale=5 缩放也可以完美运行

但请注意,这在未来可能不起作用,因为 Apple 可能会更改其 PKCanvasView 的实现

这是 SwiftUI 的示例代码

    func makeUIView(context: Context) -> UIView {
        let view = PKCanvasView()
        ...
        ...
        view.backgroundColor = .clear
        view.isOpaque = false
        view.maximumZoomScale = 5
        view.minimumZoomScale = 1

        let imageView = UIImageView(image: UIImage(named: "NameOfImage"))
        let contentView = Tool.getContentViewFromPkCanvasView(view)
        contentView.addSubview(imageView)
        contentView.sendSubviewToBack(imageView)
        return view
    }
class Tool{
    static func getContentViewFromPkCanvasView(_ view: UIView) -> some UIView {
        return view.subviews[0]
    }
}

使用 UIImageView 并将其放在 PKCanvasView 后面,然后将 PKCanvasView opaque 设置为 false,并将 color 设置为 clear。 画在上面没问题,但无法擦除。

使用 PKCanvasView 的 setDrawing

https://developer.apple.com/documentation/pencilkit/pkcanvasview/3229950-drawing

见 26:53 会话视频 221 的持续时间

见 26:53 的会议视频 221

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM