iOS开发重新认识removeFromSuperview - 芒果iOS

【主要内容:】


1. 问题起因


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PKToolPicker 是一个用于 PencilKit 的工具选择器,它提供了一组工具,包括铅笔、笔刷、橡皮擦等,用户可以通过它来选择不同的绘图工具。 在 iOS 中,使用 PKToolPicker 需要以下步骤: 1. 创建一个 PKToolPicker,并设置其 delegate 和 isVisible 属性。 2. 将 PKToolPicker 添加到视图中。 3. 配置 PKToolPicker 中的工具。 4. 处理工具选择事件。 下面是一个简单的示例代码,用于创建一个包含 PKToolPicker 的 UIViewController: ``` import UIKit import PencilKit class MyViewController: UIViewController { private var canvasView: PKCanvasView! private var toolPicker: PKToolPicker! override func viewDidLoad() { super.viewDidLoad() // 创建一个 PKCanvasView canvasView = PKCanvasView(frame: view.bounds) canvasView.backgroundColor = .white view.addSubview(canvasView) // 创建一个 PKToolPicker toolPicker = PKToolPicker() toolPicker.addObserver(canvasView, forKeyPath: "selectedTool", options: .new, context: nil) // 将 PKToolPicker 添加到视图中 if let window = view.window { toolPicker.setVisible(true, forFirstResponder: canvasView) window.addSubview(toolPicker) } // 配置 PKToolPicker 中的工具 toolPicker.addObserver(self, forKeyPath: "selectedTool", options: .new, context: nil) toolPicker.addObserver(self, forKeyPath: "color", options: .new, context: nil) toolPicker.addObserver(self, forKeyPath: "drawingAngle", options: .new, context: nil) // 处理工具选择事件 canvasView.delegate = self } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // 关联工具选择器和视图 if let window = view.window, let toolPicker = toolPicker { toolPicker.setVisible(true, forFirstResponder: canvasView) toolPicker.addObserver(canvasView, forKeyPath: "selectedTool", options: .new, context: nil) window.addSubview(toolPicker) } } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) // 移除工具选择器和视图的关联 if let toolPicker = toolPicker { toolPicker.setVisible(false, forFirstResponder: canvasView) toolPicker.removeObserver(canvasView, forKeyPath: "selectedTool") toolPicker.removeFromSuperview() } } override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if let toolPicker = object as? PKToolPicker { if keyPath == "selectedTool" { let tool = toolPicker.selectedTool // 处理工具选择事件 } else if keyPath == "color" { let color = toolPicker.color // 处理颜色选择事件 } else if keyPath == "drawingAngle" { let angle = toolPicker.drawingAngle // 处理角度选择事件 } } } } extension MyViewController: PKCanvasViewDelegate { func canvasViewDidFinishRendering(_ canvasView: PKCanvasView) { // 处理渲染完成事件 } func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) { // 处理绘图变化事件 } } ``` 上述代码中,我们创建了一个包含 PKToolPicker 的 UIViewController,并将其关联到 PKCanvasView 中,处理了工具选择事件、颜色选择事件和角度选择事件。注意,在 PKToolPicker 中选择工具时,需要将其添加为 canvasView 的 firstResponder,这样才会触发工具选择事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值