Kaz*_*awa 5 ios swift pencilkit
我喜欢PKCanvasView使用底层图像使其可滚动和缩放。在不覆盖背景图像的情况下使其可滚动和缩放似乎是可以的。但是要使用底层图像制作它,我不知道如何使其工作。
由于PKCanvasView是 的子类UIScrollView,我尝试UIView在滚动视图中放置自定义内容,然后设置一个委托来指定该视图进行缩放。但是PKCanvasView的绘图图像和内容视图在缩放时不会同步它们的位置,滚动是可以的。
+ UIView (root view)
+ PKCanvasView
+ Custom UIView (underlaying image drawing)
Run Code Online (Sandbox Code Playgroud)
然后我尝试将其PKCanvasView视为另一个中的内容视图UIScrollView,将其PKCanvasView视为不可滚动视图。然后我同步PKCanvasView的绘图和容器绘图图像之间的位置。但是,我不确定是否PKCanvasView可能不是设计为在另一个下UIScrollView,手指定位标尺的行为不稳定,通过拖动保持跳跃到另一个位置。
+ UIView (root view)
+ UIScrollView
+ Custom UIView (underlaying image drawing)
+ PKCanvasView
Run Code Online (Sandbox Code Playgroud)
据我所知,大多数PKCanvasView示例代码运行良好,无需使用底层图像进行缩放。但是一旦我设置maximumZoomScale为 2 或更多。然后它不再同步绘图和底层背景图像。
谢谢
小智 5
设置您的PKCanvasViewinMain.storyboard并将其链接到您的ViewController( @IBOutlet weak var canvasView: PKCanvasView!) 并调整以下属性(在您的Main.storyboard或viewDidLoad()为ViewController):
canvasView.isOpaque = false
Run Code Online (Sandbox Code Playgroud)
UIView view在您的中创建一个自定义viewDidLoad()并将其添加到您的PKCanvasView:
canvasView.insertSubview(view, at: 0)
Run Code Online (Sandbox Code Playgroud)
将它插入到 0 处很重要,因此它将位于您的绘图后面。
didZoom(to scale: CGFloat)在扩展中创建一个新函数,UIView或者如果您创建了一个子类,请将其添加到那里。在那里您可以将视图调整为新的比例。
在您ViewController添加一个函数,如updateContentSizeForDrawing():
func updateContentSizeForDrawing() {
view.frame.size = canvasView.contentSize
view.didZoom(to: canvasView.zoomScale)
}
Run Code Online (Sandbox Code Playgroud)
我建议在你的viewWillAppear(). 要观察用户何时缩放,请将委托函数添加到您的ViewController:
func scrollViewDidZoom(_ scrollView: UIScrollView) {
updateContentSizeForDrawing()
}
Run Code Online (Sandbox Code Playgroud)