swift - iOS 14 UIColorPicker 吸管工具未返回所选颜色
问题描述
我目前正在尝试实现新的 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()
}
解决方案
试试这个方法colorPickerViewControllerDidSelectColor
extension ViewController: UIColorPickerViewControllerDelegate {
// Called once you have finished picking the color.
func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
self.view.backgroundColor = viewController.selectedColor
}
// Called on every color selection done in the picker.
func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) {
self.view.backgroundColor = viewController.selectedColor
}
}
推荐阅读
- javascript - 错误:在子文件 React Navigation 5 中调用 GoToButton 时,您似乎将“导航容器”嵌套在另一个容器中
- node.js - Instagram 私人 api 直接消息喜欢/不喜欢
- r - 包反向依赖检查(尤其是在 Windows 上)
- firebase - Firebase 云函数:如何处理由另一个云函数引起的多个触发器?
- android - CardView 中的半透明背景无法正常工作
- frama-c - 如何分析像 open62541 这样的复杂项目?
- azure-cosmosdb - 如何合并一个文档 CosmosDb 的列表
- java - Java内部类使用来存储一个人的多个角色
- python - 为什么 Python 3 for 循环输出和行为不同?
- c# - NEST 会在 elasticsearch 中还是在客户端中进行项目?