我希望能够将PNG文件加载到PKCanvasView中,以便能够绘制和擦除其中的一部分。有没有办法做到这一点?
答案 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持续时间
答案 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中添加了上面的代码,它按预期的方式工作。