我目前正在尝试实现新的 iOS 14 UIColorPicker。一切都很好,除了eye dropper
UIColorPicker 的功能。选择滴管并采样颜色后,默认行为应该是重新打开 UIColorPicker,并将您选择的颜色作为活动颜色。出于某种原因,这不会发生。这是我的实现,它非常标准,所以我不确定为什么吸管没有按预期运行。
当我按下一些 UI 元素时,我有这些函数作为选择器传递
@objc func pickColorSky(sender: UIControl){
presentColorPicker(tag: 1, sender: sender)
}
@objc func pickColorBackground(sender: UIControl){
presentColorPicker(tag: 2, sender: sender)
}
@objc func pickColorGround(sender: UIControl){
presentColorPicker(tag: 3, sender: sender)
}
这是呈现 UIColorPickerView 本身的函数
@objc private func presentColorPicker(tag: Int, sender: UIControl){
let vc = UIColorPickerViewController()
vc.supportsAlpha = false
vc.delegate = self
vc.view.tag = tag
vc.modalPresentationStyle = .popover
vc.popoverPresentationController?.sourceView = sender
vc.popoverPresentationController?.sourceRect = sender.bounds
self.present(vc, animated: true)
}
以及处理与颜色选择器交互的委托方法
extension myViewController: UIColorPickerViewControllerDelegate {
func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
guard let options = editor?.apiView?.getRenderingOptions() else { return }
if viewController.view.tag == 1 {
let newColor = getMobileApiColor(color: viewController.selectedColor)
options.skyColor = newColor
skyRow.color.backgroundColor = newColor.uiColor
}
else if viewController.view.tag == 2 {
let newColor = getMobileApiColor(color: viewController.selectedColor)
options.backgroundColor = newColor
backgroundRow.color.backgroundColor = newColor.uiColor
}
else if viewController.view.tag == 3 {
let newColor = getMobileApiColor(color: viewController.selectedColor)
options.groundColor = newColor
groundRow.color.backgroundColor = newColor.uiColor
}
editor?.modelView?.setNeedsDisplay()
}