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

时间:2019-06-13 03:56:39

标签: ipados

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

4 个答案:

答案 0 :(得分:2)

我找不到与此有关的任何官方文档,但是我通过添加UIImageView作为PKCanvasView的第一个子视图的子视图来使其工作。 通过同时设置.maximumZoomScale = 1和.minimumZoomScale = 5

,缩放效果也非常好

但是请注意,由于苹果可能会更改其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]
    }
}

答案 1 :(得分:0)

使用PKCanvasView的setDrawing

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

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

See 26:53 of Session video 221

答案 2 :(得分:0)

使用UIImageView并将其放在PKCanvasView之后,然后将PKCanvasView的不透明性设置为false,并设置颜色以清除。可以绘画,但是不能擦除。

答案 3 :(得分:0)

首先,将UIImageView放在PKCanvasView之后,然后将PKCanvasView的不透明性设置为false,并设置颜色以清除。

然后在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中添加了上面的代码,它按预期的方式工作。