6

我喜欢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 或更多。然后它不再同步图纸和底层背景图像。

谢谢

4

2 回答 2

5

设置您的PKCanvasViewinMain.storyboard并将其链接到您的ViewController( @IBOutlet weak var canvasView: PKCanvasView!) 并调整以下属性(在您的Main.storyboardviewDidLoad()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()
}
于 2020-06-27T07:04:10.173 回答
2

我继续谷歌搜索,我找到了这个问题的线索。因为,我看不懂中文,但我能看懂代码。

https://stackoom.com/question/3pNGe/如何将UIImage转换或加载到PKDrawing中</a>

我对此进行了一段时间的试验,并将项目发布到 GitHub。

https://github.com/codelynx/PKCanvasViewTester

于 2020-05-09T23:17:28.533 回答