我不能在铅笔套件中使用不同的颜色或橡胶



为什么我不能在这个应用程序中使用其他铅笔或颜色?它只画黑色。这是我的代码:

import UIKit
import PencilKit
import PhotosUI
​
class ViewController: UIViewController, PKCanvasViewDelegate, PKToolPickerObserver {
​
@IBOutlet weak var pencilButton: UIBarButtonItem!

@IBOutlet weak var canvasView: PKCanvasView!

let canvasWidth: CGFloat = 768
let canvasOverScrollHeight: CGFloat = 500
let drawing = PKDrawing()
​

override func viewDidLoad() {
super.viewDidLoad()
canvasView.drawing = drawing
canvasView.delegate = self
canvasView.alwaysBounceVertical = true
canvasView.drawingPolicy = .anyInput

}


override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
​
let toolPicker = PKToolPicker()
toolPicker.setVisible(true, forFirstResponder: canvasView)
toolPicker.addObserver(canvasView)
canvasView.becomeFirstResponder()
}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

let canvasScale = canvasView.bounds.width / canvasWidth
canvasView.minimumZoomScale = canvasScale
canvasView.maximumZoomScale = canvasScale
canvasView.zoomScale = canvasScale

updateContentSizeForDrawing()
canvasView.contentOffset = CGPoint(x: 0, y: -canvasView.adjustedContentInset.top)
}

override var prefersHomeIndicatorAutoHidden: Bool{
return true
}

@IBAction func fingerOrPencil (_ sender: Any) {
canvasView.allowsFingerDrawing.toggle()
pencilButton.title = canvasView.allowsFingerDrawing ? "Finger" : "Pencil"
}


@IBAction func saveToCameraRoll(_ sender: Any) {

UIGraphicsBeginImageContextWithOptions(canvasView.bounds.size, false, UIScreen.main.scale)
canvasView.drawHierarchy(in: canvasView.bounds, afterScreenUpdates: true)

let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

if image != nil {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAsset(from: image!)
}, completionHandler: {success, error in

})
}
}



func updateContentSizeForDrawing() {
let drawing = canvasView.drawing
let contentHeight: CGFloat

if !drawing.bounds.isNull {
contentHeight = max(canvasView.bounds.height, (drawing.bounds.maxY + self.canvasOverScrollHeight) * canvasView.zoomScale)
} else {
contentHeight = canvasView.bounds.height
}
canvasView.contentSize = CGSize(width: canvasWidth * canvasView.zoomScale, height: contentHeight)
}

// Delegate Methods

func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
updateContentSizeForDrawing()

}
func canvasViewDidEndUsingTool(_ canvasView: PKCanvasView) {

}
func canvasViewDidFinishRendering(_ canvasView: PKCanvasView) {

}
func canvasViewDidBeginUsingTool(_ canvasView: PKCanvasView) {

}
}

这些是控制台的输出:

2023-01-04 18:34:04.429420+0300 Drawing[45460:449613] [Assert] UINavigationBar解码为unlocked for UINavigationController,或者navigationBar delegate设置不正确。配置不一致可能导致问题。navigationController=; navigationBar=<帧= (0 47;0 50);opaque = NO;autoresize = W;layer =delegate=0x123024000
2023-01-04 18:34:04.468831+0300 Drawing[45460:449613] [ToolPicker] for: PKPaletteNamedDefaults [br/>2023-01-04 18:35:00.196200+0300 Drawing[45460:449613]键盘无法呈现视图控制器(试图呈现)

toolPicket在超出方法范围时被释放。你应该在ViewController中有一个toolPicker的实例。

class ViewController: UIViewController {
let toolPicker = PKToolPicker()
...
}

我通过更改

解决了这个问题
toolPicker.addObserver(self)

toolPicker.addObserver(canvasView)

并按照@noppefoxwolf的建议在顶部添加工具选择器

最新更新