11

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

4

4 回答 4

4

首先,将您的 UIImageView 放在 PKCanvasView 后面,然后将 PKCanvasView opaque 设置为 false,并将颜色设置为 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 中添加了上面的代码,它就像它应该的那样工作。

于 2019-11-08T07:20:13.693 回答
4

我找不到任何关于此的官方文档,但我通过添加 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]
    }
}
于 2020-04-25T09:00:01.423 回答
3

使用 UIImageView 并将其放在 PKCanvasView 后面,然后将 PKCanvasView opaque 设置为 false,并将颜色设置为 clear。画在上面很好,但不能擦除。

于 2019-06-23T06:00:41.447 回答
0

使用 PKCanvasView 的 setDrawing

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

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

见会议视频 221 的 26:53

于 2019-06-22T14:28:47.147 回答