我喜欢使PKCanvasView
可以与底层图像一起滚动和缩放。使其可以滚动和缩放而不显示背景图像似乎是可以的。但是要制作带有底图的图片,我不知道如何使它生效。
由于PKCanvasView
是UIScrollView
的子类,因此我尝试将自定义内容UIView
放置在滚动视图中,然后设置一个委托以指定要缩放的视图。但是PKCanvasView
的绘图图像和内容视图在缩放时不会同步其位置,滚动也可以。
+ UIView (root view)
+ PKCanvasView
+ Custom UIView (underlaying image drawing)
然后,我尝试将
PKCanvasView
视为另一个UIScrollView
中的内容视图,将PKCanvasView
视为不可滚动的视图。然后,我将PKCanvasView
的图形和容器的图形之间的位置同步。但是,我不确定PKCanvasView
是否可能不适合在另一个UIScrollView
下使用,用手指定位标尺的行为不稳定,并通过拖动来保持跳跃的位置。+ UIView (root view)
+ UIScrollView
+ Custom UIView (underlaying image drawing)
+ PKCanvasView
据我所知,大多数
PKCanvasView
示例代码在不缩放底层图像的情况下都能很好地工作。但是一旦我将maximumZoomScale
设置为2或更多。然后,它不再同步图形和背景图像。谢谢
最佳答案
在PKCanvasView
中设置Main.storyboard
并将其链接到ViewController
(@IBOutlet weak var canvasView: PKCanvasView!
),并调整以下属性(在Main.storyboard
或viewDidLoad()
中为ViewController
):
canvasView.isOpaque = false
在您的UIView view
中也创建一个自定义viewDidLoad()
并将其添加到您的PKCanvasView
中:canvasView.insertSubview(view, at: 0)
重要的是将其插入0,这样它将位于图形的后面。在
didZoom(to scale: CGFloat)
的扩展名中创建一个新的函数UIView
,或者如果您创建了一个子类,则在其中添加它。在那里,您可以将视图调整为新的比例。在
ViewController
中添加类似updateContentSizeForDrawing()
的函数:func updateContentSizeForDrawing() {
view.frame.size = canvasView.contentSize
view.didZoom(to: canvasView.zoomScale)
}
我建议在viewWillAppear()
的末尾调用此函数。要观察用户何时缩放,请将委托函数添加到ViewController
中:func scrollViewDidZoom(_ scrollView: UIScrollView) {
updateContentSizeForDrawing()
}